Rekursive Dateiliste
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Im folgenden findet man Skripte bzw. Einzeiler in verschiedenen Programmiersprachen, um alle Dateien zu finden, die in einem Verzeichnis und dessen Unterverzeichnissen, liegen. Für die Beispiele werden alle HTML-Dateien unter /usr/share/doc gesucht.
Die Dateien für die Skripte müssen gegebenfalls mit einem Editor[2] erstellt und dann ausführbar[3] gemacht werden.
Bash¶
In der Bash ist das find-Kommando hilfreich. Die Option name
nimmt als einen Parameter einen Shell-Glob an.
find /usr/share/doc/ -name "*.html"
Alternativ kann man die Shelloptionen extglob
und globstar
aktivieren und zum Auflisten der Dateien ausschließlich die Shell nutzen:
Optionen setzen:
shopt -s extglob globstar
Dateien auflisten:
ls /usr/share/doc/**/*.html
Ruby¶
In Ruby gibt es die Klassenmethode Dir.glob
. Im Parameterstring für Dir.glob
steht **
für einen beliebigen Pfad, ansonsten werden die Zeichen *
und ?
wie in der Shell behandelt: ?
bedeutet ein beliebiges Zeichen *
bedeutet kein oder mehrere beliebige Zeichen
Dir.glob
gibt ein Array mit den passenden Dateinamen zurück.
1 2 3 4 5 | dateien = Dir.glob('/usr/share/doc/**/*.html') dateien.each { |datei| puts datei } |
kürzer geht es übrigens mit:
1 | puts Dir.glob('/usr/share/doc/**/*.html') * "\n" |
Python¶
Funktioniert ähnlich wie bei Ruby. In diesem Fall aber mit dem glob-Modul:
1 2 3 | import glob print glob.glob("/usr/share/doc/**/*.html") |
Perl¶
In Perl wird hierfür z.B. das Modul File::Find
verwendet.
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/perl use strict; use warnings; use File::Find; find(\&handle_file, '/usr/share/doc/'); exit; sub handle_file { print $_, "\n" if /.*\.html/; } |