Командная строка для рекурсивного изменения набора символов из имен файлов (UTF-8-Latin1) - PullRequest
0 голосов
/ 14 сентября 2018
  1. Переход с Linux Mint Cinammon на Mint KDE вызывает что-то с именами char наборов всех разделов!Теперь имена перепутаны.Я уже пытался изменить локали, безуспешно
  2. Проблема касается символов с акцентом (я бразильский говорящий на португальском языке)
  3. Большая проблема заключается в том, что мне приходится иметь дело примерно с 60 ГБ + из 60 000+ файлы (в основном PDF-файлы), в 1000+ папках и подпапках в разделе fat32
  4. Итак, я нашел через Интернет эту командную строку, которая прекрасно работает для меня, но в ней отсутствует рекурсивная функция, то есть она не применяетсяизменения в подпапках и файлы, содержащиеся в подпапках.Он просто применяет желаемые изменения (то есть: переименовывает файл из одного набора символов в другой) в фактическую простую единственную папку

Мой вопрос: как превратить эту командную строку в рекурсивную?Это вообще возможно?

ls -1 | while read arquivo ; do novo="`echo $arquivo \
| iconv -f UTF-8 -t ISO-8859-1`"; if [ "$novo" != "$arquivo" ] ;\
then mv "$arquivo" "$novo"; fi done

1 Ответ

0 голосов
/ 15 сентября 2018

Это должно сработать:

find . -type f -exec bash -c 'novo="`echo $1 \                                
| iconv -f UTF-8 -t ISO-8859-1`"; if [ "$novo" != "$1" ] ;\
then mv "$1" "$novo"; fi' -- {} \

Вы можете изменить . на любой соответствующий каталог и отфильтровать файлы по имени с помощью -name, см. man find.

Чтобы повлиять только на файлы, оканчивающиеся на .pdf, вы можете использовать

find . -type f -name '*.pdf' -exec bash -c 'novo="`echo $1 \                                
| iconv -f UTF-8 -t ISO-8859-1`"; if [ "$novo" != "$1" ] ;\
then mv "$1" "$novo"; fi' -- {} \

Однострочник для копирования и вставки:

find . -type f -exec bash -c 'novo="`echo $1 | iconv -f UTF-8 -t ISO-8859-    1`"; f [ "$novo" != "$1" ] ; then mv "$1" "$novo"; fi' -- {} \;
...