Saya mencari untuk mendapatkan daftar nama file saja (tanpa sisa jalur) ketika mengeksekusi perintah find dari terminal. Bagaimana cara melakukannya di mac?
Saya mencari untuk mendapatkan daftar nama file saja (tanpa sisa jalur) ketika mengeksekusi perintah find dari terminal. Bagaimana cara melakukannya di mac?
Jawaban:
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:
find . -type f -print0 | while IFS= read -r -d '' filename; do echo ${filename##*/}; done
Dengan GNU find, Anda dapat melakukan:
find ~/tmp/ -printf "%f\n"
Ini mungkin patut dicoba di OS X juga.
-printf
tidak didukung pada OSD BSD find
.
-printf
banyak berhubungan dengan C printf
atau utilitas shell POSIX printf
. 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.
find ~/tmp/ -type f | awk -F/ '{ print $NF }'
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).
EDIT :
Menggunakan sed
:
$ find . -type f | sed 's/.*\///'
Menggunakan perintah xargs , sebagaimana disebutkan dalam respons @nerdwaller
$ find . -type f -print0 | xargs --null -n1 basename
find . -type f -print0| xargs --null -n1 basename
--null
atau -n1
opsi tersedia di OSX
Bagaimana dengan ini:
find … | egrep -o -e '[^/]+$'
Keuntungan: Hanya satu proses tambahan yang dihasilkan, bukan satu untuk setiap hasil.