删除以一组 shell 响应字符命名的 Linux 文件

删除以一组 shell 响应字符命名的 Linux 文件

我创建了一个名为的文件\;:$"\'来测试我的软件。最后出现了错误,因为我无法删除文件属性。我试图通过 找到一个精确的字符组合来删除它rm,但我找不到方法。

rm \\;:$\"\\\'
rm: cannot remove `\\': No such file or directory

rm "\\"\;:$\"\\\'
rm: cannot remove `\\;:$"\\\'': No such file or directory

rm '\;:$"\'''
rm: cannot remove `\\;:$"\\': No such file or directory

(最后一次尝试让我丧命)

还有许多其他尝试。需要帮助!

答案1

如果文件名称正好是\;:$"\',那么您应该能够使用以下命令将其删除:

rm \\\;\:\$\"\\\'

只需用一个 即可转义所有字符\

答案2

您可以尝试ls -li在包含该文件的目录中删除该文件,方法是:find . -inum <inode-number> -exec rm -i {} \;

我将其添加到-ifind 命令中,以便在删除之前进行提示,以防 find 命令找到与您预期不同的另一个文件。

除了评论之外,我还尝试自己创建和删除该文件:

ls -l
total 0
-rw-r--r-- 1 test test 0 mrt 24 14:11 \;:$"\'

[test@testhost +1] /tmp/ff$ rm \\\;\:\$\"\\\' 

[test@testhost +1] /tmp/ff$ ls -l
total 0

答案3

您可以使用单引号,然后只需要担心引用单引号本身。

rm '\;:$"\'\'

在交互式使用中,您可以简单地使用制表符补全,以'\或开头\\。制表符补全来自'\收益'\;:$"\'\''',因为 bash 只是用 替换每个嵌入的单引号'\''。制表符补全来自无或\\收益\\\;\:\$\"\\\'

答案4

如果您不仅限于使用 bash 或其他 shell 脚本环境,那么删除此类文件的一种简单方法可能是编写一个简短的程序,只需调用unlink()您喜欢的语言,或者使用文件管理器(如 Gnome Commander 或 Midnight Commander)手动删除该文件。后一种选项允许您选择相关文件并将其删除,而无需在任何地方输入文件名,这将消除元字符具有任何特殊含义的可能性。

相关内容