Misalkan saya memiliki lima file mp3:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
05-trackxyz.mp3
Sekarang saya memberikan cepat mendengarkan file (hanya mplayer di konsol akan melakukan trik) dan saya menemukan bahwa trek berada dalam urutan yang salah . 05 sebenarnya 02 dan sisanya harus diganti namanya. Jadi pertama-tama saya akan melakukan perubahan nama:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
00-trackxyz.mp3
Sekarang kita membutuhkan "shift": 02 harus menjadi 03, 03 harus menjadi 04 dan 04 harus menjadi 05. Untuk meminimalkan kebingungan, ex-05 (sekarang 00) baru akan mv
diedit nanti.
Pendekatan saya adalah ini: (perl rename
, oleh Larry Wall, default di sini di Debian)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/' *
juga (nanti, setelah beberapa RTFM'ing)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/e' *
Tak satu pun dari mereka yang bekerja, terutama karena /e[val]
pengubah tidak menerima apa pun selain evaluasi, dan akan membuat kesalahan setelah Anda mencoba untuk menggabungkan evaluasi dengan string. The bash
dapat melakukannya dengan baik, misalnya foo$((1+6))
akan dievaluasi untuk foo7
.
Jadi bagaimana saya bisa melakukan ini (lebih disukai satu-liner, tidak bermaksud untuk menulis seluruh skrip mandiri hanya untuk ini)?