Il est important de comprendre que ce n'est pas le type de «corruption du système de fichiers» qui vous fsck
aidera. En ce qui concerne le système de fichiers, les noms de fichiers peuvent être n'importe quelle séquence d'octets , tant qu'aucun octet unique n'a la valeur 0x00 (ASCII NUL, marqueur de fin de chaîne C) ou 0x2F ( /
, le séparateur de répertoire). (Si un nom de fichier contient en quelque sorte un octet 00 ou 2F, fsck
devrait résoudre ce problème.)
Au lieu de cela, ce que vous avez, ce sont des noms de fichiers qui, selon Dolphin, ls
contiennent des caractères qui ne sont pas affichables dans votre "locale", il les remplace donc par des caractères d'espace réservé. Vous ne pouvez pas taper ces caractères non plus, il est donc plus difficile de manipuler les fichiers, mais vous pouvez le faire tant que vous le faites sans jamais taper ou copier et coller le nom. Par exemple, si vous supprimez ou renommez les fichiers problématiques directement depuis Dolphin, cela devrait fonctionner (j'irais jusqu'à dire que si cela ne fonctionne pas, c'est un bogue dans Dolphin).
Si vous devez faire quelque chose à leur sujet à partir du shell (par exemple, s'ils appartiennent à root
et ne peuvent donc pas être modifiés par un programme GUI), vous pouvez les nommer indirectement en utilisant des modèles "glob", qui seront développés dans la séquence correcte (s) d'octets et transmis.
Maintenant, bien sûr, vous ne voudriez pas supprimer des éléments par accident parce que votre modèle global correspond trop, donc ma recommandation serait d'utiliser l' rename
utilitaire Perl pour convertir chaque nom de fichier en son codage hexadécimal:
$ rename '$_ = unpack("H*", $_)' *
Cela ne détruit aucune information - ni le fichier lui-même, ni la signification qui aurait pu à l'origine avoir été encodée dans le nom de fichier avant qu'il ne soit modifié. Il peut être annulé pour des fichiers spécifiques avec par exemple
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
Attention: il y a deux programmes nommés rename
, d'origines différentes; les commandes ci-dessus ne fonctionneront qu'avec celle provenant de Perl. Dans Ubuntu, celui que vous voulez est celui du paquet "renommer", pas celui du paquet "util-linux". rename -h
distinguera: c'est ce que vous voulez ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... Ce n'est pas ce que tu veux ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
La chose clé à rechercher est "perlexpr". Vous pourriez avoir une ancienne version du renommage Perl qui ne comprend pas toutes les options ci-dessus, mais la commande que j'ai montrée devrait toujours fonctionner.
Edit: Sous 14.04 .5, le script perl inclus pour rename
ne prend pas en charge le commutateur -h. Vous pouvez confirmer que vous avez la bonne en vérifiant sa page de manuel, man rename
auquel cas la ligne supérieure contiendra:
RENAME (1) Guide de référence des programmeurs Perl RENAME (1)