Ich habe ein Verzeichnis mit einer Reihe von Unterverzeichnissen. Jedes dieser Unterverzeichnisse enthält ein Unterverzeichnis, die alle denselben Namen haben. Ich möchte eine Liste all dieser Dateien in der Befehlszeile erstellen. Also zum Beispiel, wenn ich habe:
dir1/
file1.txt
subdir/
relevant_file1.c
relevant_file2.c
dir2/
file2.txt
subdir/
relevant_file3.txt
relevant_file4.java
dir3/
subdir/
relevant_file5.cpp
irrelevant_subdir/
unimportant_file.txt
dir4/
subdir/
Ich hätte gerne folgende Ausgabe:
dir1/subdir/relevant_file1.c
dir1/subdir/relevant_file2.c
dir2/subdir/relevant_file3.txt
dir2/subdir/relevant_file4.java
dir3/subdir/relevant_file5.cpp
Ich nehme an, dass dies nicht zu schwierig sein sollte find
, aber ich konnte es nicht ganz herausfinden. Es ist schwierig, nach diesem Problem zu suchen, weil es so spezifisch ist, und nur die Suche nach "Datei durch Matching auf ihrem Pfad finden" bringt nichts Nützliches.
command-line
bash
directory
find
Mees de Vries
quelle
quelle
locate "/subdir/"
. Führen Sie `sudo updatedb` aus, wenn Sie die Datenbank von locate aktualisieren müssen, diese sollte jedoch jeden Tag über crontabs erstellt werden (wenn der PC zu diesem Zeitpunkt ausgeführt wird)Antworten:
Versuche dies
quelle
Das brauchst du eigentlich nicht
find
. Ein einfacherls
Wille reicht aus:Wenn Sie mit diesen Dateien etwas anfangen und sie nicht nur auflisten möchten, verwenden Sie Shell-Globs:
Das listet natürlich alles in jedem aufgerufenen Unterverzeichnis auf
subdir
. Einschließlich Verzeichnisse, Symlinks, Gerätedateien oder irgendetwas anderes. Wenn Sie es auf normale Dateien beschränken möchten, verwenden Sie esfind "*/subdir" -type f
wie von @Carl vorgeschlagen oder fügen Sie einen Dateitest hinzu:quelle
Eine bessere Problemumgehung
find
ist die Verwendung der-path
Option.Es ist nützlicher, wenn wir eine komplexere Struktur haben. etwas wie:
Im obigen Beispiel findet so etwas wie
find */subdir -type f
nur Dateien innerhalb eines erstensubdir
. Funktioniert jedochfind -path "*/subdir/*" -type f
gut.quelle
Verwenden Sie einfach das entsprechende Tool:
Möglicherweise möchten Sie Folgendes (erneut) ausführen:
Wenn Sie die Datenbank von locate aktualisieren müssen (z. B. wenn Sie kürzlich hinzugefügte Dateien suchen möchten), diese jedoch jeden Tag über crontabs erstellt werden sollte (wenn der PC zu diesem Zeitpunkt ausgeführt wird).
Wenn Sie die anfängliche Aktualisierung benötigen, scheint sie langsamer zu sein als die spezifische Suche, aber am Ende ist sie viel schneller, da alle nachfolgenden Abfragen SCHNELL ausgeführt werden.
quelle