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?
13
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:
quelle
Mit GNU find können Sie Folgendes tun:
Dies ist wahrscheinlich auch in OS X einen Versuch wert.
quelle
-printf
wird unter OS X BSD nicht unterstütztfind
.-printf
hat wenig Bezug auf das Cprintf
oder das POSIX - Shell - Dienstprogrammprintf
. 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.
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.
quelle
EDIT :
Verwenden von
sed
:Verwenden Sie den Befehl xargs , wie in der Antwort von @nerdwaller erwähnt
quelle
find . -type f -print0| xargs --null -n1 basename
--null
noch-n1
Optionen sind für OSX verfügbarWas ist damit:
Vorteil: Es wird nur genau ein zusätzlicher Prozess erzeugt, nicht einer für jedes Ergebnis.
quelle
Sie können
sh
aus der find--exec
Option heraus aufrufen und unnötige Pipes vermeiden. Dies hat auch den Vorteil, dass Sie sich keine Gedanken über lustige Dateinamen (Leerzeichen, Zeilenumbrüche usw.) machen müssen:quelle