Intereting Posts

Пакетное переименование длинных имен файлов переменной длины с годами

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

1937 - Snow White and the Seven Dwarves.avi 1940 - Pinocchio.avi 

Целевые имена:

 Snow White and the Seven Dwarves (1937).avi Pinocchio (1940).avi 

ура

Если у вас есть rename Perl (иногда известный как prename ), это действительно возможно. Если вы понимаете Regular Expresssions, это даже просто.

 rename -n 's!^(\d+) - (.*)\.(...)$!$2 ($1).$3!' *.avi 

Это означает разделение исходного имени файла на три компонента. Используя ваш первый пример, это будет

  • 1937
  • Белоснежка и семь гномов
  • AVI

Они назначаются в $1 , $2 , $3 в команде rename . (Это не переменные bash .) Затем он снова объединяет их в другом порядке.

Когда вы довольны предлагаемым результатом, измените -n на -v или полностью удалите его.

так я бы сделал это, используя только bash

 cd movie_directory ls -1 | while read line do year=$(echo ${line} | awk '{print $1}') name=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 1) ext=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 2) newname=${name}" ("${year}")."${ext} mv "${line}" "${newname}" done 

допущения:

имена файлов не содержат .
символы пробела между годом и - и имя файла – это фактически пробелы, а не tab или какой-либо другой непечатаемый символ.