So erhalten Sie nur Namen vom Befehl find ohne Pfad


14

Ich versuche, mit find nur die Namen aus dem Suchergebnis abzurufen, aber es enthält immer auch die Verzeichnisse. Wie kann ich mit find nur die Namen drucken (oder einer Variablen zuweisen)?

find trunk/messages/ -name "*.po" -printf '%f\n'

Ein ähnlicher Befehl, um dies einer Variablen zuzuweisen, z. B. "Ressource", um sie später zu verwenden.

EDIT: Und wenn möglich nur der Name ohne die Erweiterung.

Antworten:


20

Benutzen find trunk/messages/ -name "*.po" -exec basename {} .po \;

Beispiel und Erklärungen:

Erstellen Sie einige Testdateien:

$ touch test1.po  
$ touch test2.po  
$ find . -name "*.po" -print
./test1.po  
./test2.po

Ok, Dateien werden gefunden, einschließlich Pfad.

basenameFühren Sie für jedes Ergebnis den .po-Teil des Namens aus und entfernen Sie ihn

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2

Vielen Dank :). Kann ich nur die PO-Erweiterung von dirs entfernen? Ich meine: dir1 / po1.po und dir2 / po2.po können sie wie dir1 / po1 und dir2 / po2 bekommen werden?
Weck

@ user1754665find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
slhck

@slhck danke. Zuletzt muss ich den Dateinamen ohne Erweiterung abrufen und den letzten Ordner, in dem er sich befindet: zB: dir1 / subdir1 / subsubdir1 / po1.po und dir2 / subdir2 / subsubdir2 / po2.po sollte auf eine Variable wie: subsubdir1 / po1 gesetzt werden subsubdir2 / po2.
Aufwachen

@ user1754665 Hmm, vielleichtfind . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
slhck

@Hennes Was ist der Zweck von Backslash vor der öffnenden geschweiften Klammer in der letzten find?
Utku


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.