Ich versuche, eine Liste nur der Dateinamen (ohne den Rest des Pfads) zu erhalten, wenn der Befehl find von einem Terminal ausgeführt wird. Wie mache ich das auf dem Mac?
Ich versuche, eine Liste nur der Dateinamen (ohne den Rest des Pfads) zu erhalten, wenn der Befehl find von einem Terminal ausgeführt wird. Wie mache ich das auf dem Mac?
Antworten:
Mit Basisname:
find . -type f -exec basename {} \;
;
beendet die -exec
Aktion. Das \
wird benötigt, weil ;
auch die Schale eine besondere Bedeutung hat.
Evilsoup erwähnte, dass das, was gepostet wurde, für Dateinamen mit Zwischenraum nicht funktioniert. Also können Sie stattdessen Folgendes verwenden:
find . -type f -print0 | while IFS= read -r -d '' filename; do echo ${filename##*/}; done
Mit GNU find können Sie Folgendes tun:
find ~/tmp/ -printf "%f\n"
Dies ist wahrscheinlich auch in OS X einen Versuch wert.
-printf
wird unter OS X BSD nicht unterstützt find
.
-printf
hat wenig Bezug auf das C printf
oder das POSIX - Shell - Dienstprogramm printf
. Die Verwendung dieses historischen Funktionsnamens für etwas anderes wird sehr wenig berücksichtigt. Die konservativen BSD-Leute sehen das wahrscheinlich genauso, also werden wir wahrscheinlich keinen Klon -printf
im BSD-Fund unter diesem Namen sehen.
Es gibt eine bessere Möglichkeit, alles außer dem letzten Teil eines Dateipfads zu entfernen. mit awk. Es ist besser, weil awk nicht für jede Datei einmal ausgeführt wird. In einigen Fällen ist das wichtig.
find ~/tmp/ -type f | awk -F/ '{ print $NF }'
Wir suchen nur nach Dateien in ~ / tmp und erhalten eine Liste, in der jeder Eintrag durch Schrägstriche getrennt ist. Daher verwenden wir einen Schrägstrich als Feldtrennzeichen (-F /) und geben den Feldparameter ($ 1 .. $ 9) aus, der dem letzten Feld ($ NF) entspricht.
EDIT :
Verwenden von sed
:
$ find . -type f | sed 's/.*\///'
Verwenden Sie den Befehl xargs , wie in der Antwort von @nerdwaller erwähnt
$ find . -type f -print0 | xargs --null -n1 basename
find . -type f -print0| xargs --null -n1 basename
--null
noch -n1
Optionen sind für OSX verfügbar
Was ist damit:
find … | egrep -o -e '[^/]+$'
Vorteil: Es wird nur genau ein zusätzlicher Prozess erzeugt, nicht einer für jedes Ergebnis.