Apakah ada cara untuk dengan cepat mengubah semua ekstensi file dari semua file dalam folder?

14

Saya memiliki folder besar buku audio .m4b yang dalam format saat ini tidak dapat diputar di ponsel Android saya. Namun mereka berfungsi dengan baik jika diubah namanya menjadi .m4a

Apakah ada metode cepat atau perintah terminal yang dapat mengganti nama setiap file .m4b dalam folder menjadi .m4a? Tidak perlu konversi file, cukup mengubah nama ekstensi file berfungsi dengan baik.

coversnail
sumber
2
FYI: renameadalah skrip PERL dan menerima ekspresi reguler. Sistem Debian juga memiliki rename.ulperintah sebagai bagian dari util-linux-ng package. Jika perl tidak diinstal (ok, sangat tidak mungkin;)) renamejuga tidak.
Rinzwind

Jawaban:

16

Ini akan melakukan pekerjaan untuk Anda.

rename 's/.m4b$/.m4a/' *.m4b

Untuk percobaan Anda dapat menggunakan perintah ini:

rename 's/.m4b$/.m4a/' *.m4b -vn

-v berarti "verbose" dan itu akan menampilkan nama-nama file ketika mengganti nama mereka.

-n akan melakukan uji coba di mana itu tidak akan mengubah nama file, Tapi akan menunjukkan kepada Anda daftar file yang akan diganti namanya.

Basharat Sialvi
sumber
Jawabannya jauh lebih baik daripada saya. Saya malas dan berusaha untuk tidak menggunakan ekspresi reguler ...
adempewolff
Terima kasih, berhasil. Terima kasih kepada @adempewolff untuk usahanya juga
coversnail
10

Cara yang sangat cepat untuk mengganti nama file, jika hanya itu yang perlu Anda lakukan, dan tidak perlu mengonversinya ke format lain, adalah dengan menggunakan ekspansi parameter Bash, yang dirinci dengan sangat baik di wiki Bash .

Ada beberapa cara berbeda untuk mengubah ekstensi, tetapi saya menggunakan ${var/original/replacement}paradigma sederhana di sini :

for file in *.m4b; do mv -- "${file}" "${file/%m4b/m4a}"; done

Jika Anda ingin melihat apa yang akan diubah oleh perintah, tempatkan echosebelumnya mvdan perubahannya akan terdaftar.

Tentunya oneliner ini dapat dimodifikasi untuk file lain juga, dan Anda juga dapat menggunakan ekspansi parameter untuk menghapus ekstensi file juga.


sumber
+1 Cara ini berfungsi sama dengan jawaban oleh @Basharat Sial kecuali itu juga akan berfungsi ketika Anda memiliki banyak file yang cocok *.m4b. Kalau tidak, Anda akan menemukan kesalahan argument list too long.
Matt burns
Juga, untuk menyaksikannya, tambahkan bendera verbose:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
matt burns