Проверьте, является ли каталог пустым в 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

дайте мне знать, если что-нибудь:)

Другие вопросы по тегам