it-swarm.com.de

Überprüfen Sie, ob das Verzeichnis in Ruby leer ist

Wie kann ich überprüfen, ob ein Verzeichnis in Ruby leer ist oder nicht? Gibt es so etwas wie:

Dir.exists?("directory")

(Ich weiß, dass diese Funktion nicht existiert.)

28
Mark Szymanski

Ruby hat jetzt Dir.empty? , was das ganz einfach macht:

Dir.empty?('your_directory') # => (true|false)

In Rubies vor 2.4.0 können Sie einfach eine Liste der Einträge abrufen und selbst prüfen, ob diese leer sind oder nicht (Berücksichtigung von "." Und ".."). Siehe die Dokumente .

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

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

Update: die erste obige Methode zur Verwendung eines regulären Ausdrucks; jetzt nicht (offensichtlich). Die folgenden Kommentare beziehen sich hauptsächlich auf die frühere (reguläre) Version.

46
coreyward

Ab Ruby 2.4.0 gibt es Dir.empty?

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

Sie können Einträge verwenden, um alle Dateien und Ordner in einem Verzeichnis anzuzeigen:

Dir.entries('directory')
=> ['.', '..', 'file.rb', '.git']
Dir.entries('directory').size <= 2 # Check if empty with no files or folders.

Sie können auch nur mit glob nach Dateien suchen:

Dir.glob('directory/{*,.*}')
=> ['file.rb', '.git']
Dir.glob('directory/{*,.*}').empty? # Check if empty with no files.
9
Pan Thomakos

Ein leeres Verzeichnis sollte nur zwei Links (. Und ..) enthalten. Unter OSX funktioniert das wie folgt:

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

... funktioniert aber nicht unter Linux oder Cygwin. (Danke @DamianNowak) Anpassung von Pans Antwort:

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

sollte arbeiten.

3
Ben Flynn

Nicht einfach, aber funktioniert perfekt in * nix-Systemen.

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

Hier ist meine Vorlage für diese. Zu Ihrer Information, ich suche nach einer bestimmten Übereinstimmung von Dateien in der Quelle.

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

lass es mich wissen wenn überhaupt :)

0
zee