손상된 tar 파일을 압축 해제하고 삭제할 수없는 디렉토리로 끝났습니다. 삭제하려고하면 찾을 수없는 것처럼 보이지만 ls
bash 및 python과 함께 존재합니다. 나는 그것을 삭제하려고 직후를 제외하고 비슷한 동작이 rm -rf
, ls
다음 그것을 나열, 그것을 찾을 수없는 불평 (후 아래 참조 rm -rf
). 이 find
명령은 파일이 있음을 보여 주지만 여전히 파일을 삭제하는 방법을 생각할 수 없습니다.
내 시도는 다음과 같습니다.
다음은 모두를 참조 ls
하고 find
우리가 디렉토리가 동의,
rl]$ ls
mikeaâ??cnt
rl]$ find -maxdepth 1 -type d -empty -print0
./mikeaâcnt
그러나 나는 그것을 삭제할 수 없습니다 :
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
나는 그것을 할 수 cd
있고 비어 있습니다.
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ pwd
.../rl/mikeaâcnt
mikeaâ^Á^Äcnt]$ cd ../
rl]$ ls
mikeaâ??cnt
아래는 간단한 파일이 아니라 디렉토리이며 파일을 찾을 수 없다고 말한 ls
후 재미있게 행동 rm -rf
합니다.
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]$
따라서 이것은 python 시도이며 파일을 찾았지만 이름을 삭제할 수있는 이름으로 사용할 수 없습니다.
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'
탭 완성을 사용할 때도 픽업 이름을 사용할 수 없습니다.
rl]$ rm -rf mikeaâ^Á^Äcnt
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
파이썬이 bash로 보여주는 이름을 사용하면 다음과 같이됩니다.
rl]$ rm -rf "mikea\xc3\xa2\xc2\x81\xc2\x84cnt"
rl]$ ls
ls: cannot access mikeaâcnt: No such file or directory
mikeaâ??cnt
이 손상된 디렉토리를 제거하기 위해 내가 할 수있는 일이 있습니까? 기본 파일 시스템 (NFS)은 작동하는 것으로 보이며 다른 문제는보고되지 않았으며 손상된 tar 파일까지 그러한 문제가 없었습니다.
편집 : 여기에 find
자신의 -exec
옵션을 사용하여 전화rm
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]$
그러나 파일이 여전히 있습니다 (파일을 ls
찾을 수 없다고 불평하지만 어쨌든 보여줍니다)
2 차 편집 :
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
동작은 여전히 변경되지 않고 파일은 여전히 존재합니다
3 차 편집 :
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
mikeaâcnt
파이썬 시도의 출력을 보는 것보다 이름에 더 많은 것 같습니다 mikea\xc3\xa2\xc2\x81\xc2\x84cnt
.
네 번째 편집 : 이것은 와일드 카드 시도입니다.
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
내 로케일 :
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 번째 편집 :
rl]$ ls -i
ls: cannot access mikeaâcnt: No such file or directory
? mikeaâ??cnt
뿐만 아니라 동작은 지금 변경 ls
하고 cd
이 작업을 수행 :
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.
이것은 삭제하는 시도 이후에 일어난, 내가 답변 한 제안은 NFS 문제가 될 수 있음을 생각하고 여기 vinc17에 의해.
6 번째 편집 : lsof
및ls -a
rl] $ / usr / sbin / lsof mikeaâ ^ Á ^ Äcnt lsof : mikeaâ \ xc2 \ x81 \ xc2 \ x84cnt의 상태 오류 : 해당 파일 또는 디렉토리가 없습니다.
위의 잘못된 lsof
호출은 다음과 같습니다. (rl은 상위 디렉토리입니다)
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 번째 편집 : 이동이 작동하지 않습니다 (이 모든 것을 시도했지만 출력을 저장하지 않았습니다) . 파일 ls
과 동일한 문제 rm
가 있습니다.
8 편집 : 이것은 제안 된대로 16 진수 문자를 사용하고 있습니다 :
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 번째 편집 : stat
명령 :
rl]$ stat mikeaâ^Á^Äcnt
stat: cannot stat `mikeaâ\302\201\302\204cnt': No such file or directory
rl]$
그것은 모든 출력에서 훨씬 더 가능성이있는 것으로 보입니다. 댓글에서 제안한 것처럼 버그 또는 다른 NFS 오작동이 있습니다.
편집 10 : 이것은 큰, 출력 또는이 두 명령 이후의 strace 출력입니다.
strace -xx rmdir ./* | grep -e '-1 E'`
strace -xx -e trace=file ls -li`
https://gist.github.com/mikeatm/e07fa600747a4285e460
편집 11 : 위의 전에 rmdir
나는 cd
디렉토리에 들어갈 수 있음을 알았지 만 어제와 마찬가지로 다시 rmdir
할 수 없었 cd
습니다. .
및 ..
파일이 존재 :
rl]$ ls
mikeaâ??cnt
rl]$ cd mikeaâ^Á^Äcnt/
mikeaâ^Á^Äcnt]$ ls
mikeaâ^Á^Äcnt]$ ls -a
. ..
mikeaâ^Á^Äcnt]$ cd ../
최종 편집 : 이것에 대한 로컬 관리자를 보았고 서버 자체에 로그온하고 서버에서 삭제하여 처리했습니다. 그들로부터의 설명은 이름의 문자 세트가 부적절 할 때 문제가 될 수 있다는 것입니다.
mv
. 그 후에 삭제할 수 있습니다. 또는 디렉토리를 더 깊은 폴더 레벨 (와일드 카드 사용)로 이동 한 다음 이동 한 폴더를 삭제 해보십시오.
find
사용하는 대신 다른 명령으로 출력을 파이핑하는 이유가exec
있습니까?