У меня есть много изображений переменных расширений (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 может выполнить суффикс, но только позволяет переименовывать использование текущего каталога (не родительский), делая это бесполезным необходимый префикс.
Мое терминальное знание ограничено, как мое знание программирования. Любая справка значительно ценилась бы и значительно ускорит мой рабочий процесс.
Этот 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
Принятие папки содержит только файлы, которые Вы хотите переименованный, и что Вы используете удар:
$ 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
.