如果您在 UNIX/Linux 上创建了一个包含特殊字符(例如 )的文件,则touch \"la*
无法使用 删除它rm "la*
。您必须使用 inode 编号(\
我知道,如果您在名称前添加 ,则可以,但作为用户,您必须猜测它是在文件创建过程中使用的)。
我查看了 rm 的手册页,但没有提到 inode 编号。这样做rm inodenumber
也不起作用。
这个命令是什么?
答案1
其他一些方法包括:
转义特殊字符:
[~]$rm \"la\*
使用 find 命令并仅搜索当前目录。 find 命令可以搜索 inode 编号,并且有一个方便的-delete
开关:
[~]$ls -i 7404301 “啦* [~]$find . -maxdepth 1 -type f -inum 7404301 ./“啦* [~]$find . -maxdepth 1 -type f -inum 7404301 -delete [~]$ls -i [~]$
答案2
我总是用这个:
# retrieve the inode number
sav@ubuntu:~$ ls -il
total 8
415984 -rw-rw-r-- 1 sav sav 0 Apr 11 10:07 '"la*'
417981 drwxrwxr-x 2 sav sav 4096 Apr 11 09:44 ]rf
415985 -rw-rw-r-- 1 sav sav 11 Apr 8 16:24 text
# use find/delete
find . -inum 415984 -delete
答案3
如果你真的想要这样做 - 而您的用例看起来根本不需要这样做,您可以尝试文件系统调试工具。如果您愿意失去一切,那就是这样。
例如,对于 ext2/3/4,该debugfs
命令有一个“kill_file”选项,似乎需要 inode。正如其他回复中提到的,这将要损坏您的文件系统,因为会有目录条目指向不存在的文件。fsck
之后运行可能会修复此问题。您不太可能在已安装的文件系统上执行此操作。
但我会强烈推荐您只需使用适当的转义/引用,然后使用常规rm
命令删除此类文件,如先前的回复中所述 - 并rm -i
在处理包含通配符(如 *)的文件名时使用额外的安全性
答案4
您可以通过调用 来删除以破折号开头的文件rm -- filename
。