Eu descompactei um arquivo tar corrompido e consegui terminar com algum diretório
que eu não consigo apagar,
Se eu tentar excluí-lo, parece que não pode ser encontrado, mas ls
mostra que está presente, tanto com o bash quanto com o python Eu tenho um comportamento semelhante, exceto logo depois de tentar excluí-lo com rm -rf
, ls
reclama que não consegue encontrá-lo, então ele o lista (veja abaixo após rm -rf
). O comando find
mostra que o arquivo está presente
mas ainda não consigo pensar em uma maneira de excluí-lo.
Aqui estão minhas tentativas:
Aqui você vê os dois ls
e find
concordam que temos um diretório,
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -print0
./mikeaâcnt
Mas não consigo excluir:
rl]$ find -maxdepth 1 -type d -empty -print0 | xargs -0 rm -f -v
rm: cannot remove './mikeaâ2124cnt': Is a directory
rl]$ ls
mikeaâ??cnt
Eu posso cd
e está vazio:
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ pwd
.../rl/mikeaâcnt
mikeaâ^Á^Äcnt]$ cd ../
rl]$ ls
mikeaâ??cnt
veja abaixo que não é um arquivo simples, mas um diretório, mais ls
se comporta engraçado depois que rm -rf
diz que não pode encontrar o arquivo, em seguida, o relaciona logo em seguida:
rl]$ rm mikeaâ^Á^Äcnt/
rm: cannot remove 'mikeaâ2124cnt/': Is a directory
rl]$ rm -rf mikeaâ^Á^Äcnt/
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
Portanto, esta é a tentativa com python, o arquivo é encontrado, mas o nome não é
utilizável como um nome que pode ser excluído:
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'
mesmo quando eu uso o término da tabulação, o nome que ele pega não é utilizável:
rl]$ rm -rf mikeaâ^Á^Äcnt
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
usando o nome que python mostra com bash eu recebo isso:
rl]$ rm -rf "mikea\xc3\xa2\xc2\x81\xc2\x84cnt"
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
Existe algo que eu possa fazer para me livrar desse diretório corrupto?
O sistema de arquivos subjacente (NFS) parece funcional e nenhum outro problema é relatado, e eu não tive tais problemas até o arquivo tar corrompido.
EDITAR:
Aqui está usando a própria opção find
do -exec
para chamar rm
rl]$ find -maxdepth 1 -type d -empty -exec rm -f {} \;
find: './mikeaâ2124cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
mas o arquivo ainda está lá, ( ls
reclama que não pode encontrá-lo, mas mostra de qualquer maneira)
2º EDIT:
rl]$ find -maxdepth 1 -type d -empty -exec rm -rf {} \;
find: './mikeaâ2124cnt': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
O comportamento ainda é inalterado, o arquivo ainda está presente
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
Parece haver mais no nome que mikeaâcnt
de ver a saída da tentativa de python mikea\xc3\xa2\xc2\x81\xc2\x84cnt
e esta captura de tela:
4ºEDIT:Estaéatentativacomumcuringa:
rl]$echo*mikeaâcntrl]$echomike*mikeaâcntrl]$rm-rfmike*rl]$lsls:cannotaccessmikeaâcnt:Nosuchfileordirectorymikeaâ??cnt
eminhalocalidade:
rl]$localeLANG=en_US.utf8LC_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ª edição:
rl]$ ls -i
ls: cannot access mikeaâcnt: No such file or directory
? mikeaâ??cnt
mas também o comportamento mudou, agora ls
e cd
fazem isso:
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.
Isso aconteceu depois das tentativas de exclusão, estou pensando que podem ser problemas de NFS, como sugerido em uma das respostas aqui por vinc17.
6º EDIT:
Esta é a saída de lsof
e ls -a
rl] $ / usr / sbin / lsof mikeaâ ^ Äcnt
lsof: status error no mikeaâ \ xc2 \ x81 \ xc2 \ x84cnt: Nenhum arquivo ou diretório
acima está errado, aqui está a invocação correta de lsof
: (rl é o diretório pai)
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ª edição:
move não funciona, (tentei antes de tudo isso, mas não salvei a saída), mas tem o mesmo problema que ls
e rm
com o arquivo.
8ª EDIÇÃO:
isto está usando os caracteres hexadecimais como sugerido:
rl]$ ls --show-control-chars | xxd
0000000: 6d69 6b65 61c3 a2c2 81c2 8463 6e74 0a mikea......cnt.
rl]$ rmdir $'mikead69b65c3\a2c2c263e74 rl]$ stat mikeaâ^Á^Äcnt
stat: cannot stat 'mikeaâ2124cnt': No such file or directory
rl]$
acnt'
rmdir: failed to remove 'mikeastrace -xx rmdir ./* | grep -e '-1 E''
strace -xx -e trace=file ls -li'
6d69rl]$ ls
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ ls -a
. ..
mikeaâ^Á^Äcnt]$ cd ../
6b651c3\a2c2\81c2\8463rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -print0
./mikeaâcnt
6e74': No such file or directory
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
9ª edição:
para o comando stat
:
rl]$ find -maxdepth 1 -type d -empty -print0 | xargs -0 rm -f -v
rm: cannot remove './mikeaâ2124cnt': Is a directory
rl]$ ls
mikeaâ??cnt
Parece ainda mais provável de todos os resultados, há um bug ou outro mau comportamento do NFS como sugerido nos comentários.
Editar 10:
Esta é a saída strace em uma essência desde que é tão grande,
é a saída ou esses dois comandos:
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ pwd
.../rl/mikeaâcnt
mikeaâ^Á^Äcnt]$ cd ../
rl]$ ls
mikeaâ??cnt
link
Editar 11:
Então, antes do rmdir
acima, percebi que eu poderia cd
no diretório,
mas depois do rmdir
eu não consegui cd
novamente, semelhante ao ontem. Os arquivos .
e ..
estavam presentes:
rl]$ rm mikeaâ^Á^Äcnt/
rm: cannot remove 'mikeaâ2124cnt/': Is a directory
rl]$ rm -rf mikeaâ^Á^Äcnt/
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
rl]$
Edição final:
Eu vi um administrador local sobre isso e foi tratado fazendo logon no próprio servidor e excluindo a partir daí. A explicação deles é que poderia ser um problema com conjuntos de caracteres no nome sendo inadequado.