È importante capire che questo non è il tipo di "corruzione del filesystem" che fsck
ti aiuterà. Per quanto riguarda il filesystem, i nomi dei file possono essere qualsiasi sequenza di byte , purché nessun singolo byte abbia il valore 0x00 (ASCII NUL, C end-of-string marker) o 0x2F ( /
, il separatore di directory). (Se un nome di file ottiene in qualche modo un byte 00 o 2F incorporato al suo interno, fsck
dovrebbe risolverlo.)
Piuttosto, quello che hai sono i nomi dei file che il software applicativo (Dolphin, ls
) pensa contengano caratteri che non sono visualizzabili nella tua "locale", quindi li sta sostituendo con caratteri segnaposto. Non puoi nemmeno digitare quei caratteri, quindi manipolare i file è più difficile, ma puoi farlo fintanto che lo fai senza mai digitare o copiare e incollare il nome. Ad esempio, se elimini o rinomini i file del problema direttamente da Dolphin, dovrebbe funzionare (direi che se non funziona, è un bug in Dolphin).
Se devi fare qualcosa al riguardo dalla shell (ad esempio, se sono di proprietà root
e quindi non possono essere modificati da un programma GUI), puoi nominarli indirettamente usando i modelli "glob", che verranno espansi nella sequenza corretta (s) di byte e passati.
Ora, ovviamente, non vorrai cancellare cose per caso perché il tuo modello glob corrispondeva troppo, quindi la mia raccomandazione sarebbe di usare l' rename
utilità Perl per convertire ogni nome di file nella sua codifica esadecimale:
$ rename '$_ = unpack("H*", $_)' *
Questo non distrugge alcuna informazione, né il file stesso, né qualsiasi significato potrebbe essere stato codificato nel nome file prima che venisse modificato. Può essere annullato per file specifici con es
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
Attenzione: esistono due programmi denominati rename
, di origini diverse; i comandi sopra funzionano solo con quello che ha origine in Perl. In Ubuntu, quello che vuoi è quello del pacchetto "rinomina", non quello del pacchetto "util-linux". rename -h
distingueremo: questo è quello che vuoi ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... Questo non è quello che vuoi ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
La cosa fondamentale da cercare è "perlexpr". Potresti avere una versione precedente della ridenominazione Perl che non comprende tutte le opzioni sopra, ma il comando che ho mostrato dovrebbe comunque funzionare.
Modifica: Sotto 14.04 .5 lo script perl incluso per rename
non supporta l'opzione -h. Puoi confermare di avere quello corretto controllando la sua pagina man con man rename
nel qual caso la prima riga conterrà:
RENAME (1) Guida di riferimento dei programmatori Perl RENAME (1)