Cara mendapatkan hanya nama-nama dari perintah find tanpa path


14

Saya mencoba mendapatkan hanya nama-nama dari hasil pencarian menggunakan find, tetapi selalu menyertakan direktori juga. Bagaimana saya bisa mencetak hanya nama (atau menetapkan ke variabel) menggunakan find

find trunk/messages/ -name "*.po" -printf '%f\n'

perintah serupa untuk menetapkan ini ke variabel misalnya "sumber daya" untuk menggunakannya nanti.

EDIT: Dan jika mungkin hanya nama yang tidak termasuk ekstensi.

Jawaban:


20

Menggunakan find trunk/messages/ -name "*.po" -exec basename {} .po \;

Contoh dan penjelasan:

Buat beberapa file uji:

$ touch test1.po  
$ touch test2.po  
$ find . -name "*.po" -print
./test1.po  
./test2.po

Oke, file ditemukan, termasuk path.

Untuk setiap hasil eksekusi basename, dan lepaskan bagian .po dari nama

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2

Terima kasih banyak :). Bisakah saya menghapus hanya ekstensi PO dari dir? Maksud saya: dir1 / po1.po dan dir2 / po2.po dapatkah mereka mendapatkannya seperti dir1 / po1 dan dir2 / po2?
bangun

@ user1754665find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
slhck

sslhck terima kasih. terakhir saya harus mendapatkan nama file tanpa ekstensi dan folder terakhir di mana berada di: misalnya: dir1 / subdir1 / subsubdir1 / po1.po dan dir2 / subdir2 / subsubdir2 / po2.po harus diatur ke variabel seperti: subsubdir1 / po1 subsubdir2 / po2, masing-masing.
bangun

@ user1754665 Hmm, mungkinfind . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
slhck

@ Hennes Apa tujuan dari backslash sebelum kurung kurawal dibuka find?
Utku


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.