Intereting Posts
Монтирование раздела EXT4, помеченного как RAID 0xFD Как использовать собственный алгоритм шифрования в ipsec? Symlinking / var / lib для другого раздела Протирать файлы с внешнего жесткого диска, но не пустым пространством Резервное копирование с использованием rsync Сервер NFS вызывает высокую нагрузку даже в режиме ожидания Сохранение различий в двух файлах для модифицированных и новых дополнений display sco unix 5.0.6 использование samba Свежий Debian Install загрузится без GUI, в то время как Gnome beeing установлен Обновите значения файла, используя информацию из другого файла tcsh отображает курсор на следующей строке Разрешение адресов трассировки исполняемого файла пользователя в ftrace Как установить программы в / usr / local, если они не должны компилироваться с помощью root? редактировать разделенные запятой поля и grep конкретное поле больше моего Внешняя аутентификация пользователя в сеансе PAM / сеансе PAM в сеансе PAM

Как скриптировать эту функцию массового переименования?

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

HEXA DECA - Season 01 Episode 01 - name of episode HEXA DECA - Season 01 Episode 02 - name of episode 

Я хочу переименовать это:

 HE'XA DECA - S01E01 - name of episode HE'XA DECA - S01E02 - name of episode 

sed для меня слишком сложный. Каков наилучший способ достичь этого?

Лично я использую mmv для такого рода задач. Другие используют rename . Моя попытка (не проверена, очевидно, поэтому сначала попробуйте опцию -n ):

 for dir in ....; do ( cd "$dir"; mmv -r "HEXA DECA - Season ?? Episode ?? - *" "HE'XA DECA - S#1#2E#3#4 - #5" ) done 

Я сначала сперва в $dir вместо того, чтобы делать mmv "$dir/..." что также возможно. Это делается для того, чтобы избежать ситуаций, когда ваш каталог может содержать специальные символы mmv ? или * .

Я обнаружил, что vidir – это наиболее гибкое и прозрачное решение этих проблем. Там вы просто редактируете текстовый файл с именами файлов любыми средствами (в VIM или другом редакторе), и применяются изменения.

команда rename выполняет то, что вам нужно:

 find . -type f -exec rename "s/^(.*\/)HEXA DECA - Season ([0-9]*) Episode ([0-9]*) (.*)\$/\$1HE'XA DECA - S\$2E\$3 \$4/" {} \; 

Нам нужны обратные косые косы «в одиночных кавычках ' не могут быть экранированы, но в двойных кавычках нам нужно избежать символа $ .

Здесь мы находим все файлы в каталоге и подкаталогах и пытаемся переименовать их.

s/regexp/smth заменит все regexp на smth .

^(.*\/) – первая часть пути, все без базового имени, сохраненные в \$1 .

HEXA DECA - Season и Episode – это части, которые не будут сохранены, но они являются шаблонами для соответствия.

([0-9]*) s – номер сезона и эпизод, сохраненный в \$2 и \$3 .

(.*)$ – последняя часть строки, содержит имя эпизода, \$4 .

Во второй части s/// мы подставляем \$N s в шаблон, как мы хотим видеть их.