Проблема заключается в том, что ваша команда в обратные кавычки, echo {} | tr [:upper:] [:lower:]
, получает расширяется за счет оболочки первой, так, что find
на самом деле видит как аргументы
find . -depth -iname \* -exec mv {} {} \;
(Запуск tr [:upper:] [:lower:]
на входе {}
просто дает {}
снова назад).
Вот один обходной путь, используя подоболочку как -exec
команды:
find . -mindepth 1 -depth -iname \* -exec \
sh -c 'mv "$0" "`tr \[:upper:\] \[:lower:\] <<<"$0"`"' {} \;
или более читаемо, используя $() Синтаксис:
Обратите внимание, что вы также должны процитировать tr
характер диапазоны, чтобы остановить распространение оболочки!
Это также хорошая идея добавить -mindepth 1
, чтобы вы не получили ошибку при попытке запустить mv . .
.
Я пытался использовать ваш первый скрипт, но меняет только первый «уровень» дерева папок. Если у меня есть, например, DocumentsFolder-JobFolder-Test.txt, после выполнения у меня есть DOCUMENTFOLDER-JobFolder-Test.txt. Я хочу прописную букву для всех папок, подпапок и файлов, таких как DOCUMENTFOLDER-JOBFOLDER-TEST.TXT. – Ant4res
Извините, я исправил код. Он должен работать сейчас, как ожидалось. – johnbaum
Спасибо! Оно работает! – Ant4res