我未解压的腐败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
使用python用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
抱怨找不到它,但是无论如何都会显示它)
第二次编辑:
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
行为仍然没有改变,文件仍然存在
第三编辑:
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
查看python try的输出 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=
第五编辑:
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.
这是在尝试删除后发生的,我认为这可能是ninc 问题,如vinc17 此处答案之一所示。
6日编辑:这是的输出lsof
和ls -a
rl] $ / usr / sbin / lsofmikeaâ^Á^Äcntlsof: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
第七次编辑:移动将不起作用,(我在所有操作之前都尝试过,但是我没有保存输出),但是它 与文件ls
和rm
文件都存在相同的问题。
第八次编辑:这是按建议使用十六进制字符:
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]$
9th Edit:对于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
选项?