У меня есть ~ 2000 файлов в исходной схеме именования.
Мне нужно взять их все, перенести первые 4 символа в конец имени файла перед расширением, а затем добавить пробел перед первые 4 символа.
В основном, от:
0123 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).jpg
до
[UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL) 0123.jpg
Используйте find и Shell Parameter Expansion:
Если у вас нет rename установлен (но, скорее всего, он уже установлен как часть пакетов Perl). Вы можете выполнять только для всех или указанных шаблонов файлов «* .jpg». Это рекурсивно, как природа find.find . -type f -execdir \
sh -c 'X="[${1#*[}"; Y="${1%% *}";
echo mv -v "$1" "${X%.*} ${Y#./}.${X##*.}"' find-sh '{}' \;
Пояснения:
X="[${1#*[}" (cut-up-to-first-prefix): Это удаляет все, пока не увидит первый [, и добавит [ назад к шаблону. Y="${1%% *}" (cut-up-to-last-suffix): это удаляет все, пока последнее просматриваемое пространство не начинается с конца до начала имени файла; Это приведет к ./PATTERN, который является ./0123 в качестве примера. ${X%.*} (cut-up-to-first-suffix): Это удаляет суффикс (например: .jpg). Y="${Y#./}" (cut-up-to-first-prefix): Это удаляет ./ из переменной Y и приведет к PATTERN только со второго шага, который теперь 0123. .${X##*.}" (cut-up-to-last-prefix): Это удаляет все, пока последняя точка . не начнется с начала до конца имени файла и не вернет точку .; Это приведет к .PATTERN, который теперь .jpg. -execdir, используемый здесь для того, чтобы не приводить путь к файлу с помощью команды find, и безопасно вставить / path / to / files /. Это приведет к появлению приглашения, если у вас есть текущий каталог в вашем PATH или если он содержит относительные пути, которые являются небезопасными. echo используется для сухого хода, удалите его для фактического переименования.Это должно работать:
rename -n 's/^([0-9]+) (.*)\.jpg/$2 $1.jpg/' /path/to/files/*.jpg
Образец:
0324 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt
0123 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt
0124 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt
Результаты:
rename(0123 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt, [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL) 0123.txt)
rename(0124 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt, [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL) 0124.txt)
rename(0324 [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL).txt, [UNKNOWN] (Final Fantasy 9) headshot of Freya Crescent {sketch} (ORIGINAL) 0324.txt)
Примечание. Протестировано с файлами .txt
([0-9]+): выберите числа спереди.
(.*): выберите любую другую вещь до файла расширение
$2 $1.txt: вернуть захваченные группы с возвращенной группой для numbers, расположенной рядом с расширением файла jpg, и добавить пробел перед номерами.
-n: запустите без изменения имени файла, чтобы мы увидели, какие файлы были изменены и какие имена изменены, удалите это, чтобы переименовать файлы.