如何删除一个名字怪异的文件?


33

我编写了一个使用POSIX内存映射功能的程序(mmap

该程序将获取一个文件(a.dat)并对其进行内存映射以进行读取/写入。

由于程序中的错误,每次我运行该程序时,?d?P?^z??d?P?^z?都会创建一个带有一些奇怪名称(例如)的文件。错误已解决,但我无法删除文件。

我无法使用命令行或通过窗口管理器选择/删除它来删除它。

那么我应该如何删除它呢?我正在使用Ubuntu 11.04。


1
即使您不能轻松键入文件名,也可以从图形文件管理器中删除它。你遇到了什么错误?
Thomas

2
@Aditya,使用单引号(rm '?d?P?^z??d?P?^z?')转义名称时,从命令行删除此类文件没有问题。你尝试过吗?
弗雷德里克·哈米迪

从图形窗口管理器中删除仅表示无法删除文件“文件名”。@FrédéricHamidi感谢您帮助我删除一个文件。但是另一个名称为'?m?P ???)?m?P ???)'的消息不会被删除...错误消息显示“ rm:无法删除`?m?P ???)?m ?P ???)':无此类文件或目录”
AK

1
@Aditya,该其他文件的名称中必须包含不可打印的字符。请尝试以下步骤:1 /将所有有效文件移出该文件夹,2 /将文件移入该文件rm *夹。
弗雷德里克·哈米迪

1
键入文件名时,请尝试以引号开头,然后在其起作用后立即使用自动完成功能(一两个字符后)。自动完成将按[tab]键以使Shell自动完成名称。这样,您可能会更成功地正确转义名称。

Answers:


45

rm -i -- *将提示您删除每个文件。如果文件很多,可以并且应该将“ *”更改为较窄的匹配。在--停止处理选项,所以命名的文件-d将被删除rm成功。

我过去曾经使用过它,并且一直有效,直到您遇到一个不喜欢的特殊字符或2。


1
例如,这不适用于名为-d的文件。
SCO

2
@SCO如果它对您不起作用,并且取决于您的的版本rm,则可以执行操作rm -i -- *--告诉rm的某些版本,在后面没有更多的命令行开关--,并将其他args视为文件名。
JimR

1
我认为此答案应包括@JimR建议的注释:--rm命令中使用。
费利佩·阿尔瓦雷斯

16

您可以用来ls -li按其inode显示所有文件。然后运行以下命令删除文件:

find . -inum ${INODE_NUM} -delete

-maxdepth 1为了安全起见,我添加了以下内容:

find . -maxdepth 1 -inum ${INODE_NUM} -delete

1
严格来说,ls -i已经足够了。
斯科特,

ls不删除文件。OP想要这个。
费利佩·阿尔瓦雷斯

4
答案的第一行说:“您可以用来ls -li按其inode显示所有文件。”我指出,这样ls -i做足以获取文件名及其对应的inode编号的列表。(但当然,ls -ia如果要包含点文件,则需要。)
Scott

最好将-delete选项传递给find,以最大程度地减少错误文件名的使用。
ScumCoder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.