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.
find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
find . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
find
?Sie können
-execdir
Parameter verwenden, die die Datei ohne Pfad drucken, z.Dateien ohne Erweiterungen:
Hinweis: Da es sich nicht um POSIX handelt,
find
druckt BSD saubere Dateinamen, bei Verwendung von GNUfind
wird jedoch zusätzlich gedruckt./
.Siehe: Warum verhält sich der Befehl GNU find -execdir anders als der Befehl BSD find?
quelle
Basierend auf einem Befehl, den ich hier gefunden habe: http://www.unixcl.com/2009/08/remove-path-from-find-result-in-bash.html
Sie können dies tun mit
sed
(was für mich schneller ausgeführt wurde als derbasename
Ansatz):quelle