ОШИБКА. Переименуйте файлы и каталоги с использованием зарезервированных символов Windows

ОШИБКА. Переименуйте файлы и каталоги с использованием зарезервированных символов Windows

У меня был жесткий диск, который не мог монтироваться в 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' {} \;

Он преобразует символы новой строки в пробелы, затем заменяет их :на ., затем удаляет , \|затем удаляет пробелы в конце имени файла, а затем делает то же самое для пробелов в начале.-<>"?*

Связанный контент