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

У меня есть ~ 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 в 14:36

2 ответа

Используйте 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 используется для сухого хода, удалите его для фактического переименования.
1
ответ дан 18 July 2018 в 05:56

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

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

8
ответ дан 24 July 2018 в 18:28
  • 1
    Потрясающие. Это работает! Но моя тупая задница забыла использовать флаг -n, когда я играл с ним. Есть ли простой способ отменить то, что я сделал, с переименованием / ^ ([0-9] +) (. *) \. * / $ 2 $ 1. * / '[D0]. – mattdawolf 1 October 2017 в 16:36
  • 2
    @mattdawolf Используйте этот rename -n 's/^(.*) ([0-9]*)\.jpg/$2 $1.txt/' *.jpg, чтобы отменить то, что вы сделали. Помните, чтобы оставить опцию -n и быть уверенным, прежде чем удалить его! – George Udosen 1 October 2017 в 16:53
  • 3
    @mattdawolf, это [DanielFox] (character picture) Headshot of Ninetales {digital color} (ELECTRONIC COPY).jpg 0093.*, как ваши файлы сейчас? – George Udosen 1 October 2017 в 17:49
  • 4
    остальные выполнены правильно. Это всего лишь один субдир, который я испортил. Должно быть, все смоляно, но я мало в космосе. x.x Gotta gegt, что 0093 назад к началу файла удалите все дерьмо после расширения, сделайте это с другими 500 файлами, а затем запустите сценарий. Это научит меня не возвращаться ... – mattdawolf 1 October 2017 в 18:07

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

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