Ich verwende find für alle Dateien im Verzeichnis, so dass ich eine Liste von Pfaden erhalte. Ich benötige jedoch nur Dateinamen, d.h. ich erhalte ./dir1/dir2/file.txt
und ich möchte die file.txt
Antworten
Zu viele Anzeigen?Verwenden Sie -execdir
die automatisch die aktuelle Datei in {}
zum Beispiel:
find . -type f -execdir echo '{}' ';'
Sie können auch Folgendes verwenden $PWD
anstelle von .
(auf manchen Systemen wird kein zusätzlicher Punkt vorne angezeigt).
Wenn Sie noch einen zusätzlichen Punkt haben, können Sie alternativ auch laufen:
find . -type f -execdir basename '{}' ';'
-execdir utility [argument ...] ;
En
-execdir
Primär ist identisch mit dem-exec
primär mit der Ausnahme, dass das Dienstprogramm aus dem Verzeichnis ausgeführt wird, das enthält die aktuelle Datei .
Bei Verwendung +
anstelle von ;
entonces {}
wird bei jedem Aufruf von utility durch so viele Pfadnamen wie möglich ersetzt. Mit anderen Worten, es gibt alle Dateinamen in einer Zeile aus.
Wenn Sie eine Aktion nur gegen den Dateinamen ausführen wollen, verwenden Sie basename
kann schwierig sein.
Zum Beispiel dies:
find ~/clang+llvm-3.3/bin/ -type f -exec echo basename {} \;
gibt nur ein Echo von basename aus /my/found/path
. Nicht das, was wir wollen, wenn wir den Dateinamen ausführen wollen.
Aber Sie können dann xargs
die Ausgabe. z.B. um die Dateien in einem Verzeichnis anhand der Namen in einem anderen Verzeichnis zu löschen:
cd dirIwantToRMin;
find ~/clang+llvm-3.3/bin/ -type f -exec basename {} \; | xargs rm
- See previous answers
- Weitere Antworten anzeigen