rename
- это инструмент perl, позволяющий использовать любые выражения perl.Следующее выражение perl ищет последний компонент пути (например, c
в a/b/c
) и дополняет его начальный номер (если он существует) тремя цифрами.
s/(^|\/)\K(\d+)(?=[^\/]*$)/sprintf "%03d",$2/e
Пример:
1_fol/23_file.mp4
становится 1_fol/023_file.mp4
1_fol
становится 001_fol
1_2/3_4.mp4
становится 1_2/003_4.mp4
1_2
становится 001_2
Используйте вышеприведенное выражение perl в вашей команде find
для bash
✱ ...
find -depth -exec rename 's/(^|\/)\K(\d+)(?=[^\/]*$)/sprintf "%03d",$2/ge' {} +
... или расширенногоОсобенности Globstar в zsh
.В моей системе глобусы были быстрее, чем find
.
rename 's/(^|\/)\K(\d+)(?=[^\/]*$)/sprintf "%03d",$2/ge' **/*(On)
**/*
рекурсивно выводит список всех файлов и каталогов и (On)
меняет порядок в порядке, аналогичном -depth
.
✱ Дляbash
вы все еще можете использовать **/*
с shopt -s globstar
, но изменить порядок сопоставления файлов не так просто, поэтому find
проще и, вероятно, быстрее.