find /dir | awk '{print length, $0}' | sort -nr | sed 's/^[[:digit:]]* //' | while read dirfile; do outfile="$(echo "$(basename "$dirfile")" | unaccent UTF-8)"; mv "$dirfile" "$(dirname "$dirfile")/$outfile"; done
Эта команда выполняет следующие действия:
1. find /dir
— находит все файлы в директории /dir
и её поддиректориях.
2. awk '{print length, $0}'
— добавляет к каждой строке длину строки.
3. sort -nr
— сортирует строки в обратном порядке по длине.
4. sed 's/^[[:digit:]]* //'
— удаляет число и пробел в начале каждой строки.
5. while read dirfile; do ... done
— выполняет следующие действия для каждой строки.
6. outfile="$(echo "$(basename "$dirfile")" | unaccent UTF-8)"
— удаляет акценты из имени файла с помощью утилиты unaccent
и сохраняет результат в переменную outfile
.
7. mv "$dirfile" "$(dirname "$dirfile")/$outfile"
— перемещает файл, заменяя его имя на имя без акцентов.
Эта команда полезна, когда требуется удалить акценты из имен файлов в директории и всех её поддиректориях. Альтернативой может быть использование других утилит, например rename
или mmv
, которые также позволяют переименовывать файлы. Аргумент /dir
в команде может быть заменен на путь к нужной директории.