Saya mencari untuk mendapatkan daftar nama file saja (tanpa sisa jalur) ketika mengeksekusi perintah find dari terminal. Bagaimana cara melakukannya di mac?
13
Dengan nama bas:
find . -type f -exec basename {} \;
;
mengakhiri-exec
aksinya. Ini\
diperlukan karena;
juga memiliki arti khusus pada shell.Evilsoup menyebutkan bahwa apa yang diposting tidak berfungsi untuk nama file yang diberi spasi. Jadi, Anda bisa menggunakan:
sumber
Dengan GNU find, Anda dapat melakukan:
Ini mungkin patut dicoba di OS X juga.
sumber
-printf
tidak didukung pada OSD BSDfind
.-printf
banyak berhubungan dengan Cprintf
atau utilitas shell POSIXprintf
. Menggunakan nama fungsi bersejarah ini untuk sesuatu yang berbeda dianggap sangat buruk. Orang-orang BSD konservatif cenderung melihatnya dengan cara yang sama, jadi kami mungkin tidak akan melihat klon-printf
dalam temuan BSD, dengan nama itu.Ada cara yang lebih baik untuk menghapus segala sesuatu kecuali bagian terakhir dari jalur file; dengan awk. Lebih baik karena awk tidak dieksekusi satu kali untuk setiap file. Dalam beberapa kasus ini penting.
Kami hanya mencari file di ~ / tmp dan kami mendapatkan daftar di mana setiap entri dipisahkan oleh garis miring. Oleh karena itu, kami menggunakan garis miring sebagai pemisah bidang (-F /) dan mencetak parameter bidang ($ 1 .. $ 9) yang sesuai dengan bidang terakhir ($ NF).
sumber
EDIT :
Menggunakan
sed
:Menggunakan perintah xargs , sebagaimana disebutkan dalam respons @nerdwaller
sumber
find . -type f -print0| xargs --null -n1 basename
--null
atau-n1
opsi tersedia di OSXBagaimana dengan ini:
Keuntungan: Hanya satu proses tambahan yang dihasilkan, bukan satu untuk setiap hasil.
sumber
Anda bisa menelepon
sh
dari dalam-exec
opsi temukan dan menghindari menggunakan pipa yang tidak perlu. Ini juga memiliki keuntungan yang tidak perlu Anda khawatirkan dengan nama file lucu (spasi, baris baru, dll.):sumber