Ho ripristinato un file tar danneggiato e sono riuscito a trovare una directory
che non riesco a eliminare,
Se provo a eliminarlo, sembra che non possa essere trovato, ma ls
mostra che è presente, sia con bash che con python ottengo un comportamento simile, tranne subito dopo aver tentato di eliminarlo con rm -rf
, ls
si lamenta che non riesce a trovarlo, quindi lo elenca (vedi sotto dopo rm -rf
). Il find
comando mostra che il file è presente,
ma ancora non riesco a pensare a un modo per eliminarlo.
Ecco i miei tentativi:
Qui vedi entrambi ls
e find
siamo d'accordo che abbiamo una directory,
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -print0
./mikeaâcnt
Ma non posso eliminarlo:
rl]$ find -maxdepth 1 -type d -empty -print0 | xargs -0 rm -f -v
rm: cannot remove `./mikeaâ302201302204cnt': Is a directory
rl]$ ls
mikeaâ??cnt
Posso cd
ad esso però ed è vuoto:
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ pwd
.../rl/mikeaâcnt
mikeaâ^Á^Äcnt]$ cd ../
rl]$ ls
mikeaâ??cnt
vedi sotto che non è un semplice file ma una directory, più ls
si comporta in modo strano dopo rm -rf
dice che non riesce a trovare il file, quindi lo elenca subito dopo:
rl]$ rm mikeaâ^Á^Äcnt/
rm: cannot remove `mikeaâ302201302204cnt/': Is a directory
rl]$ rm -rf mikeaâ^Á^Äcnt/
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
Quindi questo è il tentativo con python, il file è stato trovato, ma il nome non è
utilizzabile come nome cancellabile:
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('.')
['mikeaxc3xa2xc2x81xc2x84cnt']
>>> 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: 'mikeaxc3xa2xc2x81xc2x84cnt'
anche quando utilizzo il completamento delle schede, il nome che raccoglie non è utilizzabile:
rl]$ rm -rf mikeaâ^Á^Äcnt
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
usando il nome che Python mostra con bash ottengo questo:
rl]$ rm -rf "mikeaxc3xa2xc2x81xc2x84cnt"
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
C'è qualcosa che posso fare per eliminare questa directory corrotta?
Il filesystem sottostante (NFS) sembra funzionante e non vengono segnalati altri problemi e non ho avuto tali problemi fino al file tar corrotto.
EDIT:
Qui sta usando find
è proprio -exec
opzione per chiamare rm
rl]$ find -maxdepth 1 -type d -empty -exec rm -f {} ;
find: `./mikeaâ302201302204cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
ma il file è ancora lì, (ls
si lamenta di non trovarlo, ma poi lo mostra comunque)
2a EDIT:
rl]$ find -maxdepth 1 -type d -empty -exec rm -rf {} ;
find: `./mikeaâ302201302204cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Il comportamento è ancora invariato, il file è ancora presente
3a 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
Sembra che ci sia qualcosa di più nel nome di mikeaâcnt
dall'osservare l'output del tentativo python mikeaxc3xa2xc2x81xc2x84cnt
e questo screenshot:
4° EDIT:
Questo è il tentativo con un jolly:
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
e la mia lingua:
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=
5a modifica:
rl]$ ls -i
ls: cannot access mikeaâcnt: No such file or directory
? mikeaâ??cnt
ma anche il comportamento è cambiato, ora ls
e cd
fai questo:
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.
Questo è successo dopo i tentativi di eliminazione, penso che potrebbero essere problemi NFS come suggerito in una delle risposte qui da vinc17.
Correlati:$PWD? (rispetto alla directory di lavoro corrente)?
6° EDIT:
Questo è l'output di lsof
e ls -a
rl]$ /usr/sbin/lsof mikeaâ^Á^Äcnt
lsof:errore di stato su mikeaâxc2x81xc2x84cnt:nessun file o directory di questo tipo
sopra è sbagliato, ecco il corretto lsof
invocazione:(rl è la directory principale)
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
7a modifica:
move non funziona (l'ho provato prima di tutto questo, ma non ho salvato l'output), ma ha lo stesso problema di ls
e rm
con il file.
8° EDIT:
questo sta usando i caratteri esadecimali come suggerito:
rl]$ ls --show-control-chars | xxd0000000:6d69 6b65 61c3 a2c2 81c2 8463 6e74 0a mikea......cnt.rl]$ rmdir $'mikea6d696b6561c3a2c281c284636e74