У меня есть несколько каталогов и подкаталогов, которые содержат файлы со специальными символами, например, этот файл:
robbie@phil:~$ ls test�sktest.txt
test?sktest.txt
Find обнаруживает escape-последовательность:
robbie@phil:~$ find test�sktest.txt -ls
424512 4000 -rwxr--r-x 1 robbie robbie 4091743 Jan 26 00:34 test\323sktest.txt
Единственная причина, по которой я могу даже ввести их имена в консоли, заключается в завершении табуляции. Это также означает, что я могу переименовать их вручную (и удалить специальный символ).
Я установил LC_ALL в UTF-8, что, похоже, не помогает (также не в новой оболочке):
robbie@phil:~$ echo $LC_ALL
en_US.UTF-8
Я подключаюсь к машине, используя ssh с моего mac. Это установка Ubuntu:
robbie@phil:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=7.10
DISTRIB_CODENAME=gutsy
DISTRIB_DESCRIPTION="Ubuntu 7.10"
Shell это Bash, TERM установлен в цвет xterm.
Эти файлы были там в течение достаточно долгого времени, и они не были созданы с использованием этой установки Ubuntu. Так что я не знаю, какими были системные настройки кодирования.
Я пробовал что-то вроде:
find . -type f -ls | sed 's/[^a-zA-Z0-9]//g'
Но я не могу найти решение, которое делает все, что я хочу:
- Определите все файлы, которые имеют не отображаемые символы (приведенное выше игнорирует слишком много)
- Для всех этих файлов в дереве каталогов (рекурсивно) выполните mv oldname newname
- По желанию, возможность транслитерации специальных символов, таких как ä, в (не обязательно, но было бы здорово)
ИЛИ
- Правильно отображать все эти файлы (и без ошибок в приложениях при попытке их открыть)
У меня есть кусочки, такие как перебирать все файлы и перемещать их, но идентификация файлов и их правильное форматирование для команды mv, кажется, трудная часть.
Любая дополнительная информация о том, почему они не отображаются правильно, или как «угадать» правильную кодировку, также приветствуется. (Я пробовал convmv, но, похоже, он не выполняет именно то, что мне нужно: http://j3e.de/linux/convmv/ )