Mam kilka katalogów i podkatalogów, które zawierają pliki ze znakami specjalnymi, takie jak ten plik:
robbie@phil:~$ ls test�sktest.txt
test?sktest.txt
Znajdź ujawnia sekwencję ucieczki:
robbie@phil:~$ find test�sktest.txt -ls
424512 4000 -rwxr--r-x 1 robbie robbie 4091743 Jan 26 00:34 test\323sktest.txt
Jedynym powodem, dla którego mogę nawet wpisać ich nazwy w konsoli, jest uzupełnianie tabulatorów. Oznacza to również, że mogę zmienić ich nazwę ręcznie (i usunąć znak specjalny).
Ustawiłem LC_ALL na UTF-8, co wydaje się nie pomagać (również nie w nowej powłoce):
robbie@phil:~$ echo $LC_ALL
en_US.UTF-8
Łączę się z maszyną za pomocą ssh z mojego komputera Mac. Jest to instalacja Ubuntu:
robbie@phil:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=7.10
DISTRIB_CODENAME=gutsy
DISTRIB_DESCRIPTION="Ubuntu 7.10"
Shell to Bash, TERM jest ustawiony na kolor xterm.
Pliki te istnieją już od dłuższego czasu i nie zostały utworzone przy użyciu tej instalacji Ubuntu. Nie wiem więc, jakie były kiedyś ustawienia kodowania systemu.
Próbowałem rzeczy w następujący sposób:
find . -type f -ls | sed 's/[^a-zA-Z0-9]//g'
Ale nie mogę znaleźć rozwiązania, które robi wszystko, co chcę:
- Zidentyfikuj wszystkie pliki, których nie można wyświetlić (powyższe ignoruje zdecydowanie za dużo)
- Dla wszystkich tych plików w drzewie katalogów (rekurencyjnie) wykonaj mv stara nazwa nowa nazwa
- Opcjonalnie możliwość transliteracji znaków specjalnych, takich jak ä na a (nie jest wymagane, ale byłoby niesamowite)
LUB
- Prawidłowo wyświetl wszystkie te pliki (i nie ma błędów w aplikacjach podczas próby ich otwarcia)
Mam drobiazgi, takie jak iteracja po wszystkich plikach i przenoszenie ich, ale identyfikowanie plików i prawidłowe formatowanie ich dla polecenia mv wydaje się być trudną częścią.
Wszelkie dodatkowe informacje na temat tego, dlaczego nie wyświetlają się poprawnie lub jak „odgadnąć” prawidłowe kodowanie są również mile widziane. (Próbowałem convmv, ale wydaje się, że nie robi dokładnie tego, czego chcę: http://j3e.de/linux/convmv/ )