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

我在Windows文本编辑器中创build了一个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':没有这样的文件或目录

更简单的方法是:

 rm -i httpd.conf? 

如果你得到一个非常耐用的文件名,你可以通过inode删除它:run ls -il得到inode号,然后使用: find -inum <inode number> -exec rm -i {} \; 删除它。

(感谢我的旧书签之一: http : //www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html )

如果你正在使用bash和bash的tab完成function,你可以使用它来完成文件名,并且有问题的字符会自动转义。

假设你在同一个目录下有两个文件: 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”开头的所有其他文件

你可以做:

 rm $'httpd.conf\r' 

要么

 rm 'httpd.conf^M' 

Ctrlv然后按Ctrlm获得^M