Предположим, у меня есть пять mp3-файлов:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
05-trackxyz.mp3
Теперь я быстро прослушиваю файлы (просто mplayer на консоли справится с задачей) и обнаруживаю, что треки расположены в неправильном порядке . 05 на самом деле 02, а остальные должны быть переименованы. Итак, сначала я сделаю временное переименование:
01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
00-trackxyz.mp3
Теперь нам нужно «смещение»: 02 должно стать 03, 03 должно стать 04 и 04 должно стать 05. Чтобы минимизировать путаницу, ex-05 (теперь 00) будет mv
издан позже.
Мой подход был такой: (perl rename
, Larry Wall, по умолчанию здесь, в Debian)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/' *
а также (позже, после еще нескольких RTFM'ing)
rename 's/0([2-4])([\s\S]+)/0($1+1)$2/e' *
Ни один из них не сработал, особенно потому, что /e[val]
модификатор не принимает ничего, кроме оценок, и выдаст ошибку, когда вы попытаетесь объединить оценки со строками. bash
Может сделать это просто отлично, например , foo$((1+6))
будет оцениваться с foo7
.
Итак, как я могу это сделать (предпочтительнее, одной строкой, не собираясь писать целый автономный скрипт только для этого)?