删除文件名中带奇数字符的文件

时间:2011-06-05 09:02:27

标签: linux shell filenames delete-file ext2

我无法删除作为备份备份副本的文件...我不记得它传递的所有文件系统字符集。

无论如何,今天这里是文件:

nas# ls -al
ls: cannot access Sécurité: No such file or directory
total 32
drwx------ 4 sambacam sambacam 20480 Jun  5 01:38 .
drwxr-xr-x 3 sambacam sambacam 12288 Jun  5 01:38 ..
d????????? ? ?        ?            ?            ? S??curit??
nas# cd S*
cd: 13: can't cd to Sécurité
nas# rm "Sécurité"
rm: cannot remove `S\303\251curit\303\251': No such file or directory
nas# rm S*
rm: cannot remove `S\303\251curit\303\251': No such file or directory
nas# 

我甚至试图用Python编写代码而没有成功:

nas# python
Python 2.5.2 (r252:60911, Jan 24 2010, 20:48:41) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> d=os.listdir('.')
>>> d
['S\xc3\xa9curit\xc3\xa9']
>>> d[0]
'S\xc3\xa9curit\xc3\xa9'
>>> os.remove(d[0])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: 'S\xc3\xa9curit\xc3\xa9'
>>> 

有什么想法吗?

我已经运行fsck来检查是否存在不一致。

2 个答案:

答案 0 :(得分:5)

我认为你的问题更严重了:

d????????? ? ?        ?            ?            ? S??curit??

这意味着ls(1)无法找到权限链接数所有者群组, size mtime 。它只有一个文件名。

如果目录结构指向文件,但是该文件的inode已丢失,则可能发生这种情况。我希望fsck找到它并清理目录条目,但如果没有发生,你可能无法在这个文件系统上清空这个目录。 (您可以将它移动到任何您想要的地方,甚至可以移动到/lost+found,而不再被它所困扰......)

也许debugfs(8)工具在学习更多内容时会有用吗?

答案 1 :(得分:3)

您是否尝试过inode号码技巧?做:

ls -ilb

该列表中的第一个数字是inode编号。 -b开关使ls不会尝试打印不可打印的字符。从文件中获取inode编号后,请尝试:

find . -inum the_number_from_above -exec rm -i {} \;

(顺便说一下:那是UTF-8编码。)

我不确定它会起作用。 ls未找到文件的元数据(时间戳和权限位)这一事实看起来像文件系统损坏。