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