Ich versuche, nach allen XML
Dateien in einem bestimmten Verzeichnis und allen (rekursiven) Unterverzeichnissen darin zu suchen .
ls -R *.xml
listet nur Dateien im aktuellen Verzeichnis auf. Ich bin mir ziemlich sicher, dass die Unterordner selbst mehrere .xml
Dateien haben, aber keine werden angezeigt.
Ist das ein Konfigurationsproblem?
ls -R | grep .xml
Antworten:
Versuchen Sie es mit Suchen
quelle
find
overls -R
?find
undgrep
, wennfind
Filterung mit Regexen und Globs möglich ist, und nicht mitfind
's-print0
und grep ' s ,-z
wenn Sie mischen müssen.Du kannst es nur mit find machen :
.
ist das aktuelle Verzeichnis. Wenn Sie in einem anderen Verzeichnis suchen müssen, ersetzen Sie es.
durch den Verzeichnispfad.quelle
.php
Dateien im aktuellen Verzeichnis gesucht . Es wurden jedoch nur.php
Dateien im aktuellen Verzeichnis zurückgegeben und nicht rekursiv in Unterverzeichnissen gesucht. Deshalb frage ich, ob derfind
Befehl rekursiv sucht oder nicht.find
Befehl sucht rekursiv. Wenn Sie den Parameter nicht in Anführungszeichen setzen, führt Ihre Shell möglicherweise eine Erweiterung der aus*
, sodass sie mit den Dateien im aktuellen Verzeichnis übereinstimmt.Versuchen Sie diesen Befehl:
ls
Es gibt keine Optionen zum Filtern der Ausgabe. Dafür müssten Sie Pipe verwenden. Das übergibt die Ausgabe vonls
angrep
, das sie dann filtert, um nur die.xml
Dateien anzuzeigen.quelle
ls
?bash
Mit der
globstar
Shell-Option können wir rekursives Globbing verwenden./**/*
Perl
Perl verfügt über ein Modul
Find
, das die rekursive Durchquerung von Verzeichnisbäumen ermöglicht. Innerhalb der Sonderfunktionfind()
können wir ein gewünschtes Unterprogramm und das Verzeichnis definieren, das wir durchlaufen möchten, in diesem Beispiel also.
. Der Einzeiler in einem solchen Fall wäre:Python
Während Perl ein ganzes Modul für die rekursive Durchquerung von Bäumen hat, hat Python eine nette Funktion
walk()
, die Teil desos
Moduls ist und wiederholt Tupel des obersten Pfads, Liste aller Unterverzeichnisse und Liste der Dateinamen zurückgibt. Wir können Folgendes tun:Das könnte als Skript viel ordentlicher sein:
finden
Andere Antworten haben
find
für rekursives Durchlaufen erwähnt, und das ist das Werkzeug für den Job. Was erwähnt werden muss, ist die Tatsache, dassfind
mehrere Befehlszeilenschalter vorhanden sind, um beispielsweise-printf
die Ausgabe im gewünschten Format zu drucken-type f
, nur reguläre Dateien zu finden,-inum
nach der Inode-Nummer-mtime
zu suchen, nach dem Änderungsdatum zu suchen und-exec <command> {} \;
einen bestimmten Befehl zum Verarbeiten der Datei auszuführen mit übergebender Datei als Argument (wobei der{}
Standardplatzhalterfind
für die aktuelle Datei ist), und vielen anderen, lesen Sie bitte die Manpage fürfind
.quelle