Рекурсивно переименуйте все файлы и папки в Title Case из терминала

Я новичок, и я искал везде для этого, я также попытался объединить команду переименования в нижнем регистре с некоторым регулярным выражением, чтобы получить Title Case вместо строчного, но я был не очень успешным.

команда преобразует все (файлы + папки) внутри данной папки в нижний регистр:

while IFS= read -r -d '' file; do mv -b -- "$file" "${file,,}"; done < <(find . -depth -name '*[A-Z]*' -print0)

И это моя попытка в случае с заголовком, она работает, но она не рекурсивна:

find . -name "*.flac" -print0 | while read -d $'\0' file; do rename 's/(^|[\s\(\)\[\]_-])([a-z])/$1\u$2/g' *; done

Это лишь некоторые из моих попыток, если есть более короткие, более короткие решения, которые мне бы очень понравились.

Не могли бы вы помочь мне? Спасибо!

EDIT: Я забыл упомянуть, мои файлы выглядят так: «09 - Дорога домой - Эми Макдональд.flac»; следует переименовать в «09 - Дорога домой» - Эми Макдональд.flac. Обратите внимание на то, что уже есть слова с надписью с надписью, а также буквы верхнего регистра в середине слова.

1
задан 24 February 2015 в 18:18

1 ответ

Если вы используете find 's -exedir, тогда имена получат любую команду с ведущими компонентами удаленного пути, например ./sOmE fILE. Затем вы могли бы заглавировать каждую последовательность слов-символов, которой предшествует либо ведущая /, либо пробел, например.

find path/ -execdir rename -nv -- 's/(?<=[\/\s])(\w)(\w*)/\u$1\L$2/g' {} +
1
ответ дан 23 May 2018 в 22:58
  • 1
    Ну, ваша команда работает только для первой буквы. Мои имена файлов также содержат пробелы. Вот пример: 09 - Дорога домой - Эми Макдональд.flac; должен быть преобразован в 09 - Дорога домой - Эми Макдональд.flac. Обратите внимание, что в середине слова могут быть буквы в верхнем регистре, а также слова уже в заголовке. – BlackR 24 February 2015 в 17:51
  • 2
    Конечно, вы правы - см. Пересмотренную версию. Я знаю, что это не исключает союзов (in, to и т. Д.) По вашему запросу. – steeldriver 24 February 2015 в 22:17
  • 3
    Тем не менее, это полезная информация. Вы могли бы использовать что-то вроде этого: " переименовать '/ \ b ((?! (A | of | the | to) \ b) [a-z] +) / \ u $ 1 / g' * ". Я думаю, что есть проблема с пропуском, если в начале имени файла. – BlackR 24 February 2015 в 22:23

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

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