如何在Ruby中检查目录是否为空?是否有类似以下的方法:
Dir.exists?("directory")
(我知道那个函数不存在。)
现在Ruby有了Dir.empty?
,使得这个过程变得非常简单:
Dir.empty?('your_directory') # => (true|false)
(Dir.entries('your_directory') - %w{ . .. }).empty?
# or using glob, which doesn't match hidden files (like . and ..)
Dir['your_directory/*'].empty?
...
是一个有效的文件名(如 ....
, ...),我认为你最好使用显式的 x == '.' || x == '..'
检查,而不是使用正则表达式。确实,...
是一个病态案例,但说出你的意思是一个好主意。 - mu is too shortDir.entries('directory')
=> ['.', '..', 'file.rb', '.git']
Dir.entries('directory').size <= 2 # Check if empty with no files or folders.
您也可以使用glob仅搜索文件:
Dir.glob('directory/{*,.*}')
=> ['file.rb', '.git']
Dir.glob('directory/{*,.*}').empty? # Check if empty with no files.
Dir.glob('directory/*')
会忽略以 .
开头的文件,例如 .profile
或 .git
。 - mu is too short一个空目录应该只有两个链接(.和..)。在OSX上,可以这样处理:
File.stat('directory').nlink == 2
...但在Linux或Cygwin上无法正常工作。(感谢@DamianNowak) 改编Pan的答案:
Dir.entries('directory').size == 2
应该能正常工作。
nlink
检查子目录的数量,这是错误的。应该检查 size
。 - NowakerDir.entries(directory_path) == ['.', '..']
这是我为此准备的模板。顺便说一下,我正在寻找源代码中特定匹配的文件。
mydir = "/home/to/mydir"
Dir.chdir(mydir)
if Dir.entries(mydir).select(|x| x != '.' && x != '..' && x =~ /\regex.txt\z/).size > 0
do_something
elsif Dir.entries(mydir).select(|x| x != '.' && x != '..' && x =~ /\regex.txt\z/).size < 0
do_something_else
else
puts "some warning message"
end
如果有任何问题,请告诉我 :)