2011-06-05 68 views
2

我无法删除备份副本的文件...我不记得它已经通过的所有文件系统字符集。删除文件中带有奇数字符的文件

不管怎么说,今天这里的文件:

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检查不一致性。

+0

FS类型是ext2! – CamilleHuot 2011-06-05 09:02:46

+0

你的语言环境是什么?尝试使用UTF-8(这是保持健全的唯一方法)。 – 2011-06-05 09:08:49

+0

我的语言环境是POSIX,UTF8没有安装在我的电脑上。也许你是对的,文件名问题可以修复。 – CamilleHuot 2011-06-05 17:20:57

回答

5

我觉得你有更严重的问题:

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

这意味着ls(1)无法找到权限链接数所有者大小,或mtime你的档案。它只有一个文件名。

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

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

+0

目前,我选择了你的精彩解决方案将目录移至lost + found目录。你知道我如何使用debugfs来查看/修复这个问题吗? – CamilleHuot 2011-06-05 17:15:30

+0

@Camille,我不愿意提出任何建议,只是因为它可能会让你的fs腐败变得更糟。请备份。 :)也就是说,它看起来像你可以使用'cd'命令导航到正确的目录。接下来会发生一些赌博:如果你使用'rm',它会在取消链接目录项后尝试取消分配inode。看起来很危险。如果使用'unlink',它将简单地取消目录条目的链接,并单独保留inode。 (这可能是更安全的选择。)但是,我再也不能强调备份的重要性。 :) – sarnold 2011-06-06 05:23:07

3

您是否尝试过使用inode号码技巧?请执行以下操作:

ls -ilb 

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

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

(BTW:这是UTF-8编码。)

我不知道它会工作,虽然。 ls未找到文件的元数据(时间戳和权限位)看起来像是文件系统损坏。

+1

优秀的把戏:) – sarnold 2011-06-05 09:13:12

+0

我不明白这是如何帮助。 'NAS#LS -ibl LS:不能Access中使用S \ 303 \ 251curit \ 303 \ 251:没有这样的文件或目录 总0 36626459 d ????????? ? ? ? ? ? S \ 303 \ 251curit \ 303 \ 251 nas#find。 -inum 36626459 -exec rm -i {} \; 找到:'。/ S \ 303 \ 251curit \ 303 \ 251':没有这样的文件或目录 nas#' – CamilleHuot 2011-06-05 17:18:25

+1

那么在这种情况下,它似乎并不是因为你的FS似乎已经损坏。在某些情况下,它确实有所帮助,在这些情况下,您无法通过更传统的方式获取文件名。 – Mat 2011-06-05 17:21:03

相关问题