У меня есть ~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
Это должно работать:
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
файлы будут также работать над jpg именами файлов
информация:
([0-9]+)
: выберите числа в передней стороне.
(.*)
: выберите любую вещь до расширения файла.
$2 $1.txt
: возвратите полученные группы с возвращенной группой для numbers
помещенный близко к расширению файла jpg
и добавьте пространство перед числами.
-n
: выполненный, не изменяя имя файла, таким образом, мы видим, какие файлы изменяются и на что изменились имена, удалите это для переименования файлов.
Используйте find
и Shell Parameter Expansion
:
rename
( но, скорее всего, он уже установлен как часть пакетов Perl). find
природа. find . -type f -execdir \
sh -c 'X="[${1#*[}"; Y="${1%% *}";
echo mv -v "$1" "${X%.*} ${Y#./}.${X##*.}"' find-sh '{}' \;
Объяснения:
X="[${1#*[}"
(префикс срезания до первого): это удаляет все до первого [ 116] видно и добавляет [
обратно к шаблону.
Y="${1%% *}"
(вырезать до последнего суффикса): это удаляет все, пока последний увиденный пробел не начнется с конца до начала имени файла; Это приведет к ./PATTERN
, который является ./0123
в качестве примера.
${X%.*}
(вырезать до первого суффикса): удаляет суффикс (например: .jpg
).
Y="${Y#./}"
(префикс cut-to-first-prefix): это удаляет ./
из переменной Y
и приводит к получению PATTERN только со второго шага, который сейчас 0123
.
.${X##*.}"
(cut-up-to-last-prefix): Это удаляет все до тех пор, пока последняя видимая точка .
не начинается с начала и до конца имени файла и не добавляет точку .
; Это приведет к .PATTERN
, который сейчас равен .jpg
.
-execdir
используется здесь, чтобы не приводить путь к файлу с помощью команды find
, и можно безопасно изменить / path / to / files / . Это выдаст приглашение, если у вас есть текущий каталог в PATH или если он содержит относительные пути, которые небезопасны .
echo
используется для пробного запуска, удалите его для фактического переименования.