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

Для меня изменение

netbeans_jdkhome="/usr/lib/jvm/java-6-openjdk-amd64"

на

netbeans_jdkhome="/usr/lib/jvm/java-7-openjdk-amd64"

в файле netbeans.conf. :):)

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

1 ответ

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

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

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

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

** в ./Folder*/**/* является рекурсивным глобом, поэтому мне нужно включить globstar.

1
ответ дан 23 May 2018 в 20:58

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

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