Saya relatif baru di Bash dan saya sedang mencoba melakukan sesuatu yang pada permukaannya tampak cukup mudah - jalankan find melalui hierarki direktori untuk mendapatkan semua file * .wma, pipa yang di-output ke perintah di mana saya mengkonversikannya ke mp3 dan simpan file yang dikonversi sebagai .mp3. Pemikiran saya adalah bahwa perintah tersebut harus terlihat seperti berikut (Saya telah meninggalkan perintah konversi audio dan saya menggunakan gema untuk ilustrasi):
$ find ./ -name '*.wma' -type f -print0 | xargs -0 -I f echo ${f%.*}.mp3
Seperti yang saya pahami, argumen -print0 akan membiarkan saya menangani nama file yang memiliki spasi (yang banyak di antaranya dilakukan sebagai file musik). Saya kemudian mengharapkan (sebagai hasil dari xargs) bahwa setiap path file dari find ditangkap dalam f, dan bahwa menggunakan pencocokan substring / delete dari akhir string, bahwa saya harus menggemakan path file asli dengan mp3 ekstensi bukan wma. Namun, alih-alih hasil ini, saya melihat yang berikut:
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
...
Jadi pertanyaan saya (selain dari spesifik 'apa yang saya lakukan salah di sini'), apakah ini - apakah nilai - nilai yang merupakan hasil dari operasi pipa perlu diperlakukan secara berbeda dalam operasi manipulasi string daripada yang merupakan hasil dari penugasan variabel ?
{}
anggota)
xargs
lebih cocok daripada exec
. Lihat tumpukan-tumpukan ini stackoverflow.com/questions/896808/find-exec-cmd-vs-xargs untuk sebuah case in point.
xargs
denganfind
. Muncul dengan-exec
opsi. Bisakah Anda menambahkan perintah yang akan Anda gunakan untuk pertanyaan Anda, dan seseorang dapat menunjukkan kepada Andafind
perintah yang benar ?