Saat ini saya berjuang dengan beberapa folder musik. Saya pernah memutuskan untuk nama mereka mengikuti pola: artist - album - year
. Saya menyadari hari ini bahwa ini bukan langkah yang cerdas dan ingin sekarang untuk nama direktori saya mengikuti pola: year - artist - album
karena mereka kemudian akan muncul dalam urutan naik ketika terdaftar.
Saya mulai melakukan penggantian nama dengan tangan tetapi, dengan sekitar 700 folder, harus ada cara yang lebih sederhana; Saya mencoba menggunakan gprename
tetapi saya tidak begitu mahir dalam regex dan bash scripting ...
Adakah orang yang bisa membantu saya melepaskan ujung jari saya yang malang?
Beberapa contoh:
Aes Dana - Memory Shell - 2004
Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
akan menjadi
2004 - Aes Dana - Memory Shell
2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)
EDIT: Beberapa nama artis dan album memiliki karakter khusus seperti And.Id
atau Kool & The Gang
. Padahal setiap direktori memiliki -
sebagai pemisah.
sumber
-
di dalamnya?Jawaban:
Dengan asumsi Anda memiliki akses ke perl
rename
(umumnya tersedia di Ubuntu - terima kasih kepada @Serg untuk menjelaskan perbedaannya. Jika ragu, hubungi/usr/bin/rename
dan Anda harus mendapatkan yang benar), Anda dapat menggunakan:Hapus
-n
setelah pengujian untuk benar-benar mengganti nama direktori. Ini mengasumsikan semua tanggal album antara 1000 dan 9999. Mungkin masuk akal ...Penjelasan
s/old/new
gantiold
dengannew
(.*)
simpan sejumlah karakter apa saja untuk referensi sebagai$1
nanti(\d{4})\/
simpan empat digit di akhir baris sebagai referensi$2
nanti.*/
cocokkan semua direktori (bukan file - terima kasih ke @muru untuk bantuan!)sumber
*/
hanya untuk mencocokkan direktori.mksh
memiliki built-in yang disebutrename
. Cukup untuk menggantinya dengan jalur penuh atau panggilanprename
untuk memanggil nama Perlrename
bukan "kadang-kadang disebutprename
" tetapi tampaknya mereka adalah dua "cabang" dari skrip yang sama, salah satu yang tidak dikelola oleh Debian, dan yang lainnya. Jadi ya. . . itu sangat berantakan - beberapa shell memiliki sendirirename
, paket perl memiliki sendirirename
, dan debian sendiri menyediakan paket terpisahrename.ul
dalam unix.stackexchange.com/q/229230/21167Skrip Python sederhana dapat melakukan pekerjaan seperti itu:
Isi skrip:
Bagaimana ini bekerja:
*/
memberikan hanya direktori sebagai argumen untuk skrip-
karakter. Nama file baru dibuat dari bagian yang kami ekstrak.move()
fungsi darishutils
modul adalah apa yang sebenarnya mengubah nama direktoriPerhatikan penggunaannya:
./rename_dirs.py */
sumber