У мене є маса каталогів і підкаталогів, які містять файли зі спеціальними символами, як, наприклад, цей файл:
robbie@phil:~$ ls test�sktest.txt
test?sktest.txt
Знайти виявляє послідовність втечі:
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"
Оболонка - Bash, для терміна встановлено xterm-колір.
Ці файли існують досить давно, і їх не було створено за допомогою встановлення Ubuntu. Тож я не знаю, якими раніше були налаштування кодування системи.
Я спробував речі:
find . -type f -ls | sed 's/[^a-zA-Z0-9]//g'
Але я не можу знайти рішення, яке виконує все, що я хочу:
- Визначте всі файли, які мають непередбачувані символи (вище зазначене занадто багато ігнорує)
- Для всіх цих файлів у дереві каталогів (рекурсивно) виконайте mv oldname newname
- Необов'язково можливість транслітерації спеціальних символів, таких як ä на a (не потрібно, але буде приголомшливо)
АБО
- Правильно відобразити всі ці файли (і помилок у програмах при спробі їх відкриття)
У мене є біти та фрагменти, як ітерація над усіма файлами та переміщення їх, але ідентифікація файлів та їх форматування для команди mv здається важкою частиною.
Будь-яка додаткова інформація щодо того, чому вони не відображаються правильно, або як "відгадати" правильне кодування, також вітається. (Я спробував convmv, але це, здається, не робить саме те, що я хочу: http://j3e.de/linux/convmv/ )