Подтвердить что ты не робот

Изменение имен файлов в нижнем регистре в Ubuntu во всех подкаталогах

Я знаю, что это было спрошено, но то, что я нашел, пока не сработало. В шкафу я пришел: rename -n 'y[A-Z]/[a-z]/' * который работает для текущего каталога. Я не слишком хорошо разбираюсь в терминале Linux, так что я должен добавить к этой команде, чтобы применить ее ко всем файлам во всех подкаталогах, из которых я есть, спасибо!

4b9b3361

Ответ 1

Здесь один из способов: find и tr:

for i in $(find . -type f -name "*[A-Z]*"); do mv "$i" "$(echo $i | tr A-Z a-z)"; done

Изменить; добавлено: -name "*[A-Z]*"

Это гарантирует, что будут найдены только файлы с заглавными буквами. Например, если файлы с только строчными буквами найдены и перемещены в один и тот же файл, mv отобразит ошибку are the same file.

Ответ 2

Perl имеет функцию lc(), поддерживающую локаль, которая может работать лучше:

find . -type f | perl -n -e 'chomp; system("mv", $_, lc($_))'

Обратите внимание, что этот script обрабатывает пробелы в именах файлов, но не символы новой строки. И нет никакой защиты от столкновений, если у вас есть "ASDF.txt" и "asdf.txt", каждый будет сбиваться.