Chcę uzyskać listę tylko nazw plików (bez reszty ścieżki) podczas wykonywania polecenia find z terminala. Jak to zrobić na komputerze Mac?
14
Z basenemame:
find . -type f -exec basename {} \;
;
kończy-exec
działanie. Jest\
to potrzebne, ponieważ;
ma również specjalne znaczenie dla powłoki.Evilsoup wspomniał, że to, co zostało opublikowane, nie działa w przypadku nazw plików z odstępami. Zamiast tego możesz użyć:
źródło
Za pomocą GNU find możesz:
Prawdopodobnie warto spróbować również w systemie OS X.
źródło
-printf
nie jest obsługiwany na BSD OS Xfind
.-printf
ma niewielki związek zprintf
narzędziem powłoki C lub POSIXprintf
. Używanie tej historycznej nazwy funkcji do czegoś innego jest bardzo źle brane pod uwagę. Konserwatywni faceci z BSD prawdopodobnie widzą to w ten sam sposób, więc prawdopodobnie nie zobaczymy klonu-printf
w znalezisku BSD pod tą nazwą.Jest lepszy sposób na usunięcie wszystkiego oprócz ostatniej części ścieżki pliku; z awk. Jest lepiej, ponieważ awk nie jest uruchamiany raz dla każdego pliku. W niektórych przypadkach ma to znaczenie.
Szukamy tylko plików w ~ / tmp i otrzymujemy listę, w której każdy wpis jest oddzielony ukośnikami. Dlatego używamy ukośnika jako separatora pól (-F /) i wypisujemy parametr pola (1 $ .. 9 $), który odpowiada ostatniemu polu ($ NF).
źródło
EDYCJA :
Używanie
sed
:Korzystanie z polecenia xargs , jak wspomniano w odpowiedzi @nerdwaller
źródło
find . -type f -print0| xargs --null -n1 basename
--null
ani nie-n1
jest dostępna w OSXA co z tym:
Zaleta: spawnowany jest tylko jeden dodatkowy proces, a nie jeden dla każdego wyniku.
źródło
Możesz dzwonić
sh
z-exec
opcji find i unikać używania niepotrzebnych potoków. Ma to również tę zaletę, że nie musisz się martwić o śmieszne nazwy plików (spacje, znaki nowej linii itp.):źródło