Я безуспешно пытался рекурсивно переименовать файлы и папки с помощью iconv, файлы переименовываются правильно, а папки - нет.
Что я использую для файлов (идеально работает):
find . -name * -depth \ -exec bash -c 'mv "$1" "${1%/*}/$(iconv -f UTF8 -t ASCII//TRANSLIT <<< ${1##*/})"' -- {} \;
Что я пробовал для файлов и папок (сбой: только переименовывать папки):
find . -exec bash -c 'mv "$1" "$(iconv -f UTF8 -t ASCII//TRANSLIT <<< $1)"' -- {} \;
ИСХОДНАЯ проблема: я просто хочу массово переименовать множество файлов, чтобы сделать их «дружественными для Интернета», думаю, что нужно удалить пробелы, странные символы и т. д., в настоящее время у меня есть
find . -name '*' -depth \
| while read f ;
do
mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr -s ' ' _|tr -d "'"|tr -d ","|tr - _|tr "&" "y"|tr "@" "a")" ;
done
Есть ли способ сделать описанные выше вещи tr и iconv за один раз? поскольку я говорю о переименовании около 300 000 файлов, я хотел бы по возможности избежать повторного поиска.
Если нужно, работаю с Bash 4.2.24.
Заранее спасибо.