Изменить имена файлов в текущей директорий в нижний регистр. Как?

Как переименовать файлы в нижний регистр ? Используя при этом find и awk

Пример (before):

./AaA 
./aAa 
./ ...

(after):

./aaa
./aaa
/ ...

Ответы (3 шт):

Автор решения: badcast
find . -type f -exec sh -c "mv {} \$(echo {} | awk '{ print tolower(\$0) }')" \; 
→ Ссылка
Автор решения: Ivan

Втекущей директории можно обойтись без find'а и awk'а, как-то так:

for f in *; { mv "$f" "${f,,}"; }
→ Ссылка
Автор решения: Zt.

так как в простой задаче по переименованию могут всплыть много проблем, постараемся заранее очертить их

  1. Переименовать нужно файлы и только файлы в текущей и вложенных в неё директориях
  2. Переименовывать нужно также и скрытые(те что начинаются на точку) файлы
  3. Недопустить потерю файлов при переименовании когда конечное название будет одинаково, например: FILE.txt и file.TXT оба станут file.txt что приведёт к потере одного из них, в данном случае можно отметить файл с похожим названием дополнительным обозначением.

и так на основе вышесказанного, создадим полигон для тестирования учитывающие вышеупомянутые проблемы

$ rm -rf test;mkdir -p test/DIR; touch test/DIR/File" "1.txt; touch test/.File" "2.txt; touch test/{F,f}ile3.txt; tree -a test
test
├── DIR
│   └── File 1.txt
├── .File 2.txt
├── file3.txt
└── File3.txt

1 directory, 4 files

выполним команду для преобразования

$ find test -type f -execdir sh -c 'f="{}";mv --backup=numbered -v "$f" "${f,,}"' \;
mv: './file3.txt' и './file3.txt' - один и тот же файл
переименован './File3.txt' -> './file3.txt' (резервная копия: './file3.txt.~1~')
переименован './.File 2.txt' -> './.file 2.txt'
переименован './File 1.txt' -> './file 1.txt'

здесь -execdir выполнит команду только после перехода внутрь конечной папки, то есть это позволит нам избежать переименования поддиректорий.

по итогу получим

$ tree -a test
test
├── DIR
│   └── file 1.txt
├── .file 2.txt
├── file3.txt
└── file3.txt.~1~

1 directory, 4 files

здесь окончание *.~1~ указывает на файл с дублирующим именем и он автоматом создаётся утилитой mv с помощью ключа --backup, при желании окончание можно переопределить под свои нужны с помощью ключа --suffix

п.с.

если обязательно для преобразования использовать awk то можно сделать так:

find test -type f -execdir sh -c "mv --backup=numbered -v \"{}\" \"\$(echo {} |awk '{print tolower(\$0)}')\"" \;
→ Ссылка