Переименовать каждый второй файл

У меня есть довольно много файлов, которые я хотел бы переименовать (слишком много, чтобы сделать это вручную), обычно я бы использовал Automator, но дело в том, что мне нужно, чтобы каждый другой файл назывался так же, как файл перед ним, но с 2 вместо 1

Это мои файлы до сих пор

xxx - 401a - yyy.zzz
xxx - 401b - yyy.zzz
xxx - 402a - yyy.zzz
xxx - 402b - yyy.zzz
xxx - 403a - yyy.zzz

И так далее, но я бы хотел переименовать их во что-то вроде

xxx - 401-pt1.zzz
xxx - 401-pt2.zzz
xxx - 402-pt1.zzz
xxx - 402-pt2.zzz
xxx - 403-pt1.zzz

В любом случае, чтобы сделать это с автоматом? Спрашиваю, потому что я действительно редко использую Automator, а это означает, что я не совсем то, что вы бы назвали экспертом.

РЕДАКТИРОВАТЬ: Это то, чего я пытаюсь достичь: http://wiki.plexapp.com/index.php/Media_Naming_and_Organization_Guide#Stacked_Episodes


person Mobilpadde    schedule 20.06.2013    source источник


Ответы (1)


Если вы ничего не знаете об этом инструменте, не будете ли вы против использования чего-то другого? Как насчет простой команды оболочки?

Вот та же операция в Bash с повышением уровня универсальности. Вам, вероятно, не интересны первые два, так как они жестко закодированы yyy и zzz, но я сделал это, чтобы показать вам команда sed немного, чтобы понять третью.

for file in * ; do mv "$file" "$(echo $file | sed 's/a - yyy/-pt1/g')"; mv "$file" "$(echo $file | sed 's/b - yyy/-pt2/g')"; done

for file in * ; do mv "$file" "$(echo $file | sed 's/a - .*.zzz/-pt1.zzz/g')"; mv "$file" "$(echo $file | sed 's/b - .*.zzz/-pt2.zzz/g')"; done

for file in * ; do mv "$file" "$(echo $file | sed -r 's/a - .*.([a-z]{3})/-pt1.\1/')"; mv "$file" "$(echo $file | sed -r 's/b - .*.([a-z]{3})/-pt2.\1/')"; done

Конечно, должно быть много других способов с другими командами. Вы получите несущественные ошибки, потому что mv выполняется дважды для всей партии.

person Sébastien Dawans    schedule 20.06.2013
comment
Похоже, что @Sébastien Dawans приложил значительные усилия к предложенному им решению, которое я планирую изучить и извлечь из него уроки, но сначала я хотел бы предупредить вас об этом замечании: › Вы получите несущественные ошибки, потому что mv выполняется дважды на всю партию. Я не думаю, что разумно игнорировать ошибки или даже игнорировать предупреждения при программировании в целом. Я вернусь к вам с дополнительными идеями о том, как понимать сценарии оболочки bash. - person Kaydell; 28.06.2013
comment
привет, спасибо за комментарий, я упомянул об этой ошибке, которая возникает из-за того, что mv выполняется дважды подряд при выводе списка файлов. На второй итерации ранее перемещенные файлы больше не существуют. Конечно, есть более чистый способ сделать это. - person Sébastien Dawans; 28.06.2013
comment
Хм, похоже, не работает... Получаю это каждый раз, когда пытаюсь sed: illegal option -- r usage: sed script [-Ealn] [-i extension] [file ...] sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...] mv: rename Adventure Time - 213-pt2 - Mortal Recoil {C_P} (720p).mkv to : No such file or directory - person Mobilpadde; 11.07.2013