Ho un sacco di directory e sottodirectory che contengono file con caratteri speciali, come questo file:
robbie@phil:~$ ls test�sktest.txt
test?sktest.txt
Trova rivela una sequenza di escape:
robbie@phil:~$ find test�sktest.txt -ls
424512 4000 -rwxr--r-x 1 robbie robbie 4091743 Jan 26 00:34 test\323sktest.txt
L'unico motivo per cui posso persino digitare i loro nomi sulla console è a causa del completamento della scheda. Questo significa anche che posso rinominarli manualmente (e rimuovere il carattere speciale).
Ho impostato LC_ALL su UTF-8, che non sembra aiutare (anche non su una nuova shell):
robbie@phil:~$ echo $LC_ALL
en_US.UTF-8
Mi sto collegando alla macchina usando ssh dal mio mac. È un'installazione 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 è impostato su xterm-color.
Questi file sono lì da un po 'di tempo e non sono stati creati usando quell'installazione di Ubuntu. Quindi non so quali fossero le impostazioni di codifica del sistema.
Ho provato le cose sulla falsariga di:
find . -type f -ls | sed 's/[^a-zA-Z0-9]//g'
Ma non riesco a trovare una soluzione che fa tutto ciò che voglio:
- Identifica tutti i file con caratteri non visualizzabili (quanto sopra ignora troppo)
- Per tutti quei file in un albero di directory (ricorsivamente), esegui mv oldname newname
- Opzionalmente, la possibilità di traslitterare caratteri speciali come ä in un (non richiesto, ma sarebbe fantastico)
O
- Visualizza correttamente tutti questi file (e nessun errore nelle applicazioni quando si tenta di aprirli)
Ho bit e pezzi, come iterare su tutti i file e spostarli, ma identificare i file e formattarli correttamente per il comando mv sembra essere la parte difficile.
Sono inoltre benvenute eventuali informazioni aggiuntive sul motivo per cui non vengono visualizzate correttamente o su come "indovinare" la codifica corretta. (Ho provato convmv ma non sembra fare esattamente quello che voglio: http://j3e.de/linux/convmv/ )