Giả sử tôi có năm tệp mp3:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
05-trackxyz.mp3
Bây giờ tôi nghe nhanh các tập tin (chỉ cần mplayer trên bàn điều khiển sẽ thực hiện thủ thuật) và tôi phát hiện ra rằng các bản nhạc không đúng thứ tự . 05 thực sự là 02 và phần còn lại sẽ phải đổi tên. Vì vậy, trước tiên tôi sẽ thực hiện đổi tên tạm thời:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
00-trackxyz.mp3
Bây giờ chúng ta cần một "ca": 02 nên trở thành 03, 03 nên trở thành 04 và 04 nên trở thành 05. Để giảm thiểu nhầm lẫn, ex-05 (bây giờ 00) sẽ chỉ là mv
ed sau.
Cách tiếp cận của tôi là thế này: (perl rename
, bởi Larry Wall, mặc định ở đây trên Debian)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/' *
cũng như (sau này, sau một số RTFM'ing nữa)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/e' *
Không ai trong số họ làm việc, đặc biệt là vì công cụ /e[val]
sửa đổi không chấp nhận bất cứ điều gì khác ngoài các đánh giá và sẽ đưa ra lỗi khi bạn cố gắng kết hợp các đánh giá với chuỗi. Có bash
thể làm điều đó tốt, ví dụ foo$((1+6))
sẽ được đánh giá foo7
.
Vậy làm thế nào tôi có thể làm điều này (ưu tiên một lớp, không có ý định viết toàn bộ tập lệnh độc lập chỉ cho việc này)?