Подтвердить что ты не робот

Проверьте, не пуст ли каталог в Ruby

Как проверить, пуст ли каталог или нет в Ruby? Есть что-то вроде:

Dir.exists?("directory")

(Я знаю, что эта функция не существует.)

4b9b3361

Ответ 1

Вы можете просто получить список записей и сами убедиться, что он пуст (ну, вам придется учитывать "." и ".." ). См. документы.

(Dir.entries('your_directory') - %w{ . .. }).empty?

# or using glob, which doesn't match hidden files (like . and ..)
Dir['your_directory/*'].empty?

Обновление: первый метод, использованный выше для использования регулярного выражения; теперь это не (очевидно). Комментарии ниже в основном относятся к предыдущей версии (regex).

Ответ 2

Вы можете использовать записи для просмотра всех файлов и папок в каталоге:

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.

Ответ 3

Как и Ruby 2.4.0, есть Dir.empty?

Dir.empty?('/') # => false

Ответ 4

Пустой каталог должен содержать только две ссылки (. и..). В OSX это работает:

File.stat('directory').nlink == 2

... но не работает на Linux или Cygwin. (Спасибо @DamianNowak) Адаптация ответа Pan:

Dir.entries('directory').size == 2

должен работать.

Ответ 5

Непросто, но отлично работает в системах типа nix.

Dir.entries(directory_path) == ['.', '..']

Ответ 6

Вот мой шаблон для этого 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

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