Comme vous pouvez le voir ci-dessous, les fichiers ont des caractères rares.
Les supprimer soit dans le terminal soit dans Dolphin renvoie l'erreur:
Aucun fichier ou répertoire de ce nom
L'exécution ls -la
sur le répertoire m'a donné cette sortie:
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ?2?.???љ?!?Gb??σ?[?F?
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??3]d???:????????1????G?p?ȋ??????嫳?d????ą-??
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 3l??#g?w????O?JKB7?co??քH??bT?NA???S???X?I?A?qC??M?I???
-rw-rw-r-- 1 aalap aalap 0 Nov 14 01:05 ??8??-?@,?Zp?[?bI????7^?ñ[?ڏ??z?O???ч??eEȰ?+??,OF??h
J'ai exécuté une fsck
commande sur la partition à partir d'un autre système d'exploitation, mais cela n'a rien changé.
Comment supprimer ces fichiers?
files
filesystem
encoding
filename
karjedavpalaa
la source
la source
Réponses:
Un moyen simple serait de supprimer ces fichiers par leur inode. :)
Utilisez
ls -li
dans le répertoire avec les caractères inhabituels pour afficher le numéro d'inode de chaque fichier, par exemple,Ensuite, utilisez l'
find
utilitaire pour supprimer le fichier correspondant par son nom, en utilisant la syntaxefind <somepath> -inum <inode_number> -exec rm -i {} \;
, comme dans l'exemple suivant:L'
-i
option derm
n'est pas vraiment nécessaire, je viens de l'ajouter pour vous empêcher de supprimer accidentellement des fichiers que vous ne vouliez pas supprimer. :) Cela amènerm
à demander une confirmation pour chaque fichier que vous souhaitez supprimer.Si vous souhaitez supprimer plusieurs fichiers par leurs inodes, vous pouvez utiliser la syntaxe
-o
(sens ou ) pourfind
:Vous pouvez ajouter plus de numéros d'inode en étendant l'expression entre parenthèses avec plus d'
-o -inum <inode_number>
expressions.la source
rm -ri .
?rm -ri .
ne supprime cependant pas les fichiers par inode. Il récursera simplement dans tout le répertoire de travail et demandera chaque fichier si vous souhaitez le supprimer - et vous devez être très attentif aux fichiers qu'il demande afin de ne pas supprimer accidentellement les fichiers indésirables. Je ne voudrais certainement pas utiliser cette commande pour mon répertoire personnel - elle contient BEAUCOUP de fichiers. ;)-inum
indiquefind
de rechercher des fichiers par leur numéro d'inode. (2){}
correspond au (x) fichier (s) trouvé (s) pargrep
. (3) \ échappe au;
symbole qui termine la commande passée à l'-exec
option defind
. (4) J'ai modifié ma réponse pour expliquer comment supprimer plusieurs fichiers en une seule fois.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: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
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 ...... Ce n'est pas ce que tu veux ...
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:la source
file $(which rename)
impression? (Assurez-vous que lefile
package est installé en premier.)/usr/bin/rename: symbolic link to /etc/alternatives/rename
(file
est installé par défaut) En fait, vous devez rechercher les liens symboliques pour l'obtenir,/usr/bin/file-rename: a /usr/bin/perl -w script, ASCII text executable
maisman rename
c'est une indication plus rapide ...--version
; la commande que j'ai suggérée devrait toujours fonctionner. (/usr/share/doc/rename/changelog.gz sur mon ordinateur, qui exécute Debian unstable, indique qu'il a--version
été ajouté dans la version 0.10 du changement de nom Perl, en 2013. Je suis surpris qu'Ubuntu envoie toujours quelque chose de plus ancien que cela, mais ce programme n'a pas changé sa fonctionnalité depuis 2007 (!) donc ça va.)