J'ai décompressé un fichier tar corrompu et j'ai réussi à me retrouver avec un répertoire que je ne peux pas supprimer. Si j'essaie de le supprimer, il semble qu'il ne puisse pas être trouvé, mais ls
il est présent, à la fois avec bash et avec python. comportement similaire, sauf juste après que j'essaie de le supprimer avec rm -rf
, se ls
plaint qu'il ne peut pas le trouver, puis il le répertorie (voir ci-dessous après rm -rf
). La find
commande indique que le fichier est présent, mais je ne trouve toujours pas de moyen de le supprimer.
Voici mes tentatives:
Ici vous voyez les deux ls
et find
convenez que nous avons un répertoire,
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -print0
./mikeaâcnt
Mais je ne peux pas le supprimer:
rl]$ find -maxdepth 1 -type d -empty -print0 | xargs -0 rm -f -v
rm: cannot remove `./mikeaâ\302\201\302\204cnt': Is a directory
rl]$ ls
mikeaâ??cnt
Je peux le cd
faire et c'est vide:
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ pwd
.../rl/mikeaâcnt
mikeaâ^Á^Äcnt]$ cd ../
rl]$ ls
mikeaâ??cnt
voyez ci-dessous qu'il ne s'agit pas d'un fichier simple mais d'un répertoire. De plus, il ls
se comporte de manière amusante après rm -rf
qu'il indique qu'il ne trouve pas le fichier, puis le répertorie directement après:
rl]$ rm mikeaâ^Á^Äcnt/
rm: cannot remove `mikeaâ\302\201\302\204cnt/': Is a directory
rl]$ rm -rf mikeaâ^Á^Äcnt/
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
Il s’agit donc d’une tentative avec python, le fichier est trouvé, mais le nom ne peut pas être utilisé comme nom pouvant être supprimé:
rl]$ python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import shutil
>>> os.listdir('.')
['mikea\xc3\xa2\xc2\x81\xc2\x84cnt']
>>> shutil.rmtree(os.listdir('.')[0] )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/shutil.py", line 204, in rmtree
onerror(os.listdir, path, sys.exc_info())
File "/usr/lib64/python2.6/shutil.py", line 202, in rmtree
names = os.listdir(path)
OSError: [Errno 2] No such file or directory: 'mikea\xc3\xa2\xc2\x81\xc2\x84cnt'
même lorsque j'utilise l'onglet de complétion, le nom qu'il prend n'est pas utilisable:
rl]$ rm -rf mikeaâ^Á^Äcnt
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
en utilisant le nom que python montre avec bash, je reçois ceci:
rl]$ rm -rf "mikea\xc3\xa2\xc2\x81\xc2\x84cnt"
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Y a-t-il quelque chose que je puisse faire pour me débarrasser de ce répertoire corrompu? Le système de fichiers sous-jacent (NFS) semble fonctionnel et aucun autre problème n'a été signalé. Je n'ai eu aucun problème de ce type jusqu'à ce que le fichier tar corrompu.
EDIT: Ici, vous utilisez votre find
propre -exec
option pour appelerrm
rl]$ find -maxdepth 1 -type d -empty -exec rm -f {} \;
find: `./mikeaâ\302\201\302\204cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
mais le fichier est toujours là (se ls
plaint de ne pas pouvoir le trouver, mais le montre quand même)
2e édition:
rl]$ find -maxdepth 1 -type d -empty -exec rm -rf {} \;
find: `./mikeaâ\302\201\302\204cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Le comportement est toujours inchangé, le fichier est toujours présent
3ème EDIT:
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -exec rm -rf {} +
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Il semble y avoir plus dans le nom que mikeaâcnt
de regarder le résultat de la tentative python mikea\xc3\xa2\xc2\x81\xc2\x84cnt
et cette capture d'écran:
4ème EDIT: Ceci est la tentative avec un joker:
rl]$ echo *
mikeaâcnt
rl]$ echo mike*
mikeaâcnt
rl]$ rm -rf mike*
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
et mon lieu:
rl]$ locale
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
5ème édition:
rl]$ ls -i
ls: cannot access mikeaâcnt: No such file or directory
? mikeaâ??cnt
mais aussi le comportement a changé, maintenant ls
et cd
fais ceci:
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt
mikeaâcnt: No such file or directory.
Ce qui est arrivé après les tentatives de suppression, je pense qu'il pourrait y avoir des problèmes NFS comme suggéré dans l' une des réponses ici par vinc17.
6ème EDIT: Ceci est la sortie de lsof
etls -a
rl] $ / usr / sbin / lsof mikeaâ ^ Á ^ Äcnt lsof: erreur d'état sur mikeaâ \ xc2 \ x81 \ xc2 \ x84cnt: aucun fichier ou répertoire de ce type
ci-dessus est faux, voici l' lsof
appel correct : (rl est le répertoire parent)
rl]$ /usr/sbin/lsof | grep mike | grep rl
tcsh 11926 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
lsof 14733 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
grep 14734 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
grep 14735 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
lsof 14736 mike cwd DIR 0,33 4096 19569249 /home/mike/mish/rl
rl]$
rl]$ ls -a
ls: cannot access mikeaâcnt: No such file or directory
. .. mikeaâ??cnt
7ème édition: mouvement ne fonctionnera pas, (je l' ai essayé avant tout cela, mais je n'ai pas sauvé la sortie), mais il a le même problème que ls
et rm
avec le fichier.
8ème EDIT: ceci utilise les caractères hexa tels que suggérés:
rl]$ ls --show-control-chars | xxd
0000000: 6d69 6b65 61c3 a2c2 81c2 8463 6e74 0a mikea......cnt.
rl]$ rmdir $'mikea\6d69\6b65\61c3\a2c2\81c2\8463\6e74\0acnt'
rmdir: failed to remove `mikea\006d69\006b651c3\a2c2\\81c2\\8463\006e74': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
9ème édition: pour la stat
commande:
rl]$ stat mikeaâ^Á^Äcnt
stat: cannot stat `mikeaâ\302\201\302\204cnt': No such file or directory
rl]$
Cela semble encore plus probable de toutes les sorties, il y a un bogue ou une autre mauvaise conduite de NFS comme suggéré dans les commentaires.
Edit 10: Ceci est la sortie de strace dans un résumé puisque sa taille, sa sortie ou ces deux commandes:
strace -xx rmdir ./* | grep -e '-1 E'`
strace -xx -e trace=file ls -li`
https://gist.github.com/mikeatm/e07fa600747a4285e460
Edit 11: Donc, avant ce qui précède, rmdir
j'ai remarqué que je pouvais cd
entrer dans le répertoire, mais après cela, rmdir
je ne pouvais cd
plus, comme hier. Les fichiers .
et ..
étaient présents:
rl]$ ls
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ ls -a
. ..
mikeaâ^Á^Äcnt]$ cd ../
Final Edit: J'ai vu un administrateur local à ce sujet et le problème a été résolu en se connectant au serveur lui-même et en le supprimant. L'explication de ceux-ci est qu'il pourrait y avoir un problème avec les jeux de caractères du nom inappropriés.
mv
. Peut-être que vous pourrez le supprimer après cela Vous pouvez également essayer de déplacer le répertoire vers un dossier plus profond (éventuellement avec un caractère générique), puis de supprimer le dossier dans lequel vous l'avez déplacé.
find
la sortie vers une commande différente au lieu d'utiliser simplement sonexec
option?