[[Vorlage(Getestet,general)]] {{{#!vorlage Wissen [:Terminal:Einen einen Terminal öffnen] [:Editor:Einen Editor öffnen] [:Rechte:Datei-Rechte ändern] }}} [[Inhaltsverzeichnis(3)]] Im folgenden findet man Skripte bzw. Einzeiler in verschiedenen [:Programmiersprache: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. {{{#!vorlage Befehl 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: {{{#!vorlage Befehl shopt -s extglob globstar }}} Dateien auflisten: {{{#!vorlage Befehl 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. {{{#!code ruby dateien = Dir.glob('/usr/share/doc/**/*.html') dateien.each { |datei| puts datei } }}} kürzer geht es übrigens mit: {{{#!code ruby puts Dir.glob('/usr/share/doc/**/*.html') * "\n" }}} = Python = Funktioniert ähnlich wie bei Ruby. In diesem Fall aber mit dem glob-Modul: {{{#!code python import glob print glob.glob("/usr/share/doc/**/*.html") }}} = Perl = In Perl wird hierfür z.B. das Modul `File::Find` verwendet. {{{#!code perl #!/usr/bin/perl use strict; use warnings; use File::Find; find(\&handle_file, '/usr/share/doc/'); exit; sub handle_file { print $_, "\n" if /.*\.html/; } }}} ---- # tag: Programmierung