У меня был жесткий диск, который не мог монтироваться в Linux Mint, и чтобы исправить это, мне пришлось перейти в Windows и сделать chkdsk /f e:
. chkdsk исправил проблему, но он переименовал все файлы со специальными символами и переместил эти файлы в каталог found.000
. Так что теперь мне приходится перемещать и переименовывать эти файлы снова, как они были раньше. Если я время от времени буду запускать команду, чтобы переименовать файлы со специальными символами, я смогу избежать этого снова.
Я хочу рекурсивнопереименовать файлы и каталогииз текущего каталога.новые строкиследует заменитьдля космоса,персонажи < > : " \ | ? *
должно бытьудаленныйили еще лучше заменить на похожие символы, которые не зарезервированы ипространствавначало и конецимени файла должно бытьудаленный. Вот примерчто я хочу:
rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Fîlenämè $@')
Вот что было быдаже лучше:
rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Filename $@')
В соответствии сэтот ответэто должно быть что-то вроде этого:
LC_ALL=C find . -depth -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +
Мне нужно игнорировать ..Trash-1000
каталог, так как эта команда дает мнеОШИБКИ ввода/выводаи команда перестает работать. Было бы идеально иметь скрипт, который обрабатывает эти ошибки, если в этом каталоге есть файлы, которые можно переименовать.
Мне сказали очистить ..Trash-1000
каталог, как вэтот ответ. Я также посмотрел наВот этот. Но так делать не получится:
LC_ALL=C find . -depth -path ./..Trash-1000 -prune -o -print -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +
И он по-прежнему не удаляет пробелы в начале и конце имен файлов.
Мне пришлось переписать свой вопрос так:Скрипт для рекурсивной замены недопустимых символов в именах файлов, а не каталогов, с помощью renameне ответил на мой.
решение1
Вместо того чтобы удалять каталог, вызывающий ошибки ввода/вывода, команду можно выполнить один раз для каждого из остальных каталогов.
Вот команда, которую я использовал для удаления зарезервированных символов Windows:
find . -execdir rename -n 's/[\r\n]+/ /g;
s/:/./g;
s/[\|]/-/g;
s/[<>"?*]//g;
s/[ \f\t\v]+$//g;
s/^[ \f\t\v]+//g' {} \;
Он преобразует символы новой строки в пробелы, затем заменяет их :
на .
, затем удаляет , \|
затем удаляет пробелы в конце имени файла, а затем делает то же самое для пробелов в начале.-
<>"?*