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

У меня есть много изображений переменных расширений (jpeg, jpg, png) содержавшийся во многих различных каталогах, многих из который мой содержаться в других папках для организации.

Такой как:

Folder 1/
Folder A/
     Image 01.jpg
     Image 02.png
Folder 2/
     Folder B/
          Folder C/
               Image 03.jpeg
               Image 04.png

Иерархия и папки изменяются в зависимости от того, что я продолжаю работать. Я обычно должен добавлять изображения, порождают папку как префикс и дают страницам суффикс числа Страницы 001,002 и т.д.

Я обычно входил в каждую папку и пакет, называющий все изображения в папке с программой Pyrenamer, но это занимает время. 50 заданий для 50 папок, например.

Я знаю, что сценарий мог быть сделан (предпочтительно сценарий наутилуса), что я могу использовать на единственной папке, содержащей много папок для выполнения задания.

Например, "Изображение 01.jpg" переименовать к "Папке - Страница 001.jpg", в то время как "Изображение 04.png" будет переименовано к "Папке C - Страница 004.png". Изображения находятся в особом порядке и нужны к переименованному и пронумерованному в ТОМ ЖЕ порядке как прежде, только с надлежащим префиксом и суффиксом.

Pyrenamer может выполнить суффикс, но только позволяет переименовывать использование текущего каталога (не родительский), делая это бесполезным необходимый префикс.

Мое терминальное знание ограничено, как мое знание программирования. Любая справка значительно ценилась бы и значительно ускорит мой рабочий процесс.

1
задан 26 April 2015 в 13:57

2 ответа

Этот bash сценарий должен сделать: путь для управления должен быть передан ему как аргумент (это является намеренным), например:

./script.sh <directory>
#!/bin/bash

while read filepath
do
    newpath="$(<<< "$filepath" sed 's/^\(.*\)\/\(.*\)\/[^ ]*\(.*\)$/\1\/\2\/Folder \2 - Page 0\3/')"
    mv "$filepath" "$newpath"
done <<< "`find $1 -type f \( -iname '*.png' -o -iname '*.jpeg' -o -iname '*.jpg' \)`"

Прежде:

<directory>
├── f1
│   ├── Image 01.png
│   ├── Image 02.png
│   └── Image 03.jpeg
├── f2
│   └── f2.1
│       ├── Image 04.jpeg
│       ├── Image 05.jpg
│       └── Image 06.jpg
└── f3
    └── f3.1
        └── f3.1.1
            ├── Image 07.png
            ├── Image 08.png
            └── Image 09.jpeg

После:

<directory>
├── f1
│   ├── Folder f1 - Page  001.png
│   ├── Folder f1 - Page  002.png
│   └── Folder f1 - Page  003.jpeg
├── f2
│   └── f2.1
│       ├── Folder f2.1 - Page  004.jpeg
│       ├── Folder f2.1 - Page  005.jpg
│       └── Folder f2.1 - Page  006.jpg
└── f3
    └── f3.1
        └── f3.1.1
            ├── Folder f3.1.1 - Page  007.png
            ├── Folder f3.1.1 - Page  008.png
            └── Folder f3.1.1 - Page  009.jpeg

1
ответ дан 10 November 2019 в 10:54

Принятие папки содержит только файлы, которые Вы хотите переименованный, и что Вы используете удар:

$ shopt -s globstar
$ rename -n 's;/([^/]*)/([^/]*) (\d+)\.(\w+)$;sprintf("/%s/%s - Page %03d.%s", $1, $1, $3, $4);e' ./Folder*/**/*
./Folder 2/Folder B/Folder C/Image 03.jpeg renamed as ./Folder 2/Folder B/Folder C/Folder C - Page 003.jpeg
./Folder 2/Folder B/Folder C/Image 04.png renamed as ./Folder 2/Folder B/Folder C/Folder C - Page 004.png
./Folder A/Image 01.jpg renamed as ./Folder A/Folder A - Page 001.jpg
./Folder A/Image 02.png renamed as ./Folder A/Folder A - Page 002.png

rename сценарий Perl, это очень полезно для переименования файлов. В этом случае я использую regex что:

  • /([^/]*)/ - соответствует компоненту каталога, ограниченному наклонными чертами.
  • ([^/]*) - соответствует префиксу имени файла, за которым следует пространство
  • (\d+) - соответствует цифрам в имени файла
  • \.(\w+) - соответствует расширению
  • $ все привязанные в конце имени файла.

Затем я использую sprintf распечатать подобранные значения желаемым способом. Варьируйтесь 3 дюйма %03d получить больше дополнения.

** в ./Folder*/**/* рекурсивный шарик, который является, почему я должен включить globstar.

1
ответ дан 7 December 2019 в 13:59

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

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