如何在Linux中删除包含特殊字符的文件?

如何在Linux中删除包含特殊字符的文件?

我在 Windows 文本编辑器中创建了一个 Linux Bash 文件。该文件包含用于在 Linux 下将文件移动到另一个位置的命令。

运行此文件后,我发现目标文件末尾有“\r”符号。(我猜这是因为 Linux 和 Windows 使用不同的行结束符号)

因此“Dir”命令显示我有如下文件:“httpd.conf\r”,而“ls”显示与“httpd.conf?”相同的文件名。

我如何删除这些文件?

这些命令不起作用:

Rm httpd.conf\r
Rm httpd.conf\\r
rm 'httpd.conf\r'

我收到以下错误:

rm: 无法 lstat `httpd.confr':没有此文件或目录

答案1

更简单的方法是:

rm -i httpd.conf?

答案2

如果您获得了一个非常难懂的文件名,您可以通过 inode 删除它:运行ls -il以获取 inode 编号,然后使用: find -inum <inode number> -exec rm -i {} \;删除它。

(此内容来源于我的一张旧书签:http://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html

答案3

如果您正在使用 bash,并且 bash 的制表符补全功能已启用,则可以使用它来补全文件名,并自动转义相关字符。

答案4

假设同一目录中有两个文件:httpd.confhttpd.conf\r

复制您要保留的文件:

$ sudo cp httpd.conf httpd-keep.conf

只需删除全部以httpd.conf开头的文件:

$ sudo rm httpd.conf*

恢复原始文件:

$ sudo mv httpd-keep.conf httpd.conf

你需要备份所有其他文件rm在执行如上所示的命令之前,如果有以“httpd.conf”开头的内容。

相关内容