Как проверить, пуст ли каталог или нет в Ruby? Есть что-то вроде:
Dir.exists?("directory")
(Я знаю, что эта функция не существует.)
Как проверить, пуст ли каталог или нет в Ruby? Есть что-то вроде:
Dir.exists?("directory")
(Я знаю, что эта функция не существует.)
Вы можете просто получить список записей и сами убедиться, что он пуст (ну, вам придется учитывать "." и ".." ). См. документы.
(Dir.entries('your_directory') - %w{ . .. }).empty?
# or using glob, which doesn't match hidden files (like . and ..)
Dir['your_directory/*'].empty?
Обновление: первый метод, использованный выше для использования регулярного выражения; теперь это не (очевидно). Комментарии ниже в основном относятся к предыдущей версии (regex).
Вы можете использовать записи для просмотра всех файлов и папок в каталоге:
Dir.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.
Как и Ruby 2.4.0, есть Dir.empty?
Dir.empty?('/') # => false
Пустой каталог должен содержать только две ссылки (. и..). В OSX это работает:
File.stat('directory').nlink == 2
... но не работает на Linux или Cygwin. (Спасибо @DamianNowak) Адаптация ответа Pan:
Dir.entries('directory').size == 2
должен работать.
Непросто, но отлично работает в системах типа nix.
Dir.entries(directory_path) == ['.', '..']
Вот мой шаблон для этого one.FYI, я ищу определенное соответствие файлов внутри источника.
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
дайте мне знать, если что-нибудь:)