Переместите символы от запуска имен файлов в конец (перед расширением) и добавьте пробел

У меня есть ~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
6
задан 1 October 2017 в 04:36

2 ответа

Это должно работать:

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: выполненный, не изменяя имя файла, таким образом, мы видим, какие файлы изменяются и на что изменились имена, удалите это для переименования файлов.

8
ответ дан 23 November 2019 в 07:33

Используйте find и Shell Parameter Expansion :

  1. Если у вас не установлено rename ( но, скорее всего, он уже установлен как часть пакетов Perl).
  2. Вы можете выполнять только для всех или указанных совпавших файлов паттерны только "* .jpg".
  3. Это рекурсивно, как 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.

    [ 1138]
  • .${X##*.}" (cut-up-to-last-prefix): Это удаляет все до тех пор, пока последняя видимая точка . не начинается с начала и до конца имени файла и не добавляет точку .; Это приведет к .PATTERN, который сейчас равен .jpg.

  • -execdir используется здесь, чтобы не приводить путь к файлу с помощью команды find, и можно безопасно изменить / path / to / files / . Это выдаст приглашение, если у вас есть текущий каталог в PATH или если он содержит относительные пути, которые небезопасны .

  • echo используется для пробного запуска, удалите его для фактического переименования.

1
ответ дан 23 November 2019 в 07:33

Другие вопросы по тегам:

Похожие вопросы: