it-swarm.cn

如何删除名称以“-”开头的文件(连字符,即破折号或减号)?

如何删除文件名以破折号(连字符或减号)-开头的文件?我被放入远程OSX服务器中,并且我的目录中有以下文件:

tohru:~ $ ls -l
total 8
-rw-r--r--    1 me  staff  1352 Aug 18 14:33 --help
...

我该如何从CLI删除--help?我有时会以不同的形式遇到此问题,这些文件易于创建,但很难消除。

我尝试使用反斜杠

rm \-\-help

我已经尝试过引号

rm "--help"

如何防止减号(连字符或连字符)被解释为选项?

377
Bryan Rehbein

使用“-”使rm停止解析命令行选项,如下所示:

rm -- --help
559
Vegar Nilsen

或者你可以做

rm ./--help
236
edfuh

使用find来做到这一点:

find . -name '--help' -delete

这是一个很好的方法,因为如果您删除的文件过多,则可以通过简单地先运行find而不使用-delete选项,然后再运行if的列表来获得文件的预览列表。文件看起来不错,只需使用-delete重新运行即可。

实际上,避免rm偏爱find(尤其是先预览)是一个好习惯,可以帮助您避免rm *的错误,这不可避免地会在某天咬您。

但是请注意,该查找将在所有子目录中递归,因此您可能需要使用这样的子目录深度约束来运行它:

find . -maxdepth 1 -name '--help' -delete

这将查找限制为当前目录。

41
aculich

Vegar Nilsen和edfuh的答案非常好,并且是对此类问题的正确解决方案。

我确实想对此问题添加一个一般性的答复,该答复允许您删除文件名困难的any文件。首先,它的inode号是使用ls -i或某种形式的stat,然后通过按索引节点号在当前目录中搜索文件并在具有匹配的索引节点号的文件上执行rm命令来删除文件

find . -inode <inode> -exec rm {}\;

由于inode编号在每个文件系统中都是唯一的,因此您可以使用此文件删除任何文件; unicode或使用转义字符。这是非常烦人的输入方式,所以我建议添加该行

TAB: menu-complete             # Tab: Cycles through the command
"\e[Z": menu-complete-backward # Shift-Tab: Cycles backwards

进入您的.inputrc文件(如果您使用的是bash)。这使您可以循环浏览可能的完成列表( 有关更多信息 )。

21
Baldur

一个残酷的解决方案:

Perl -e "unlink '--help' or die 'Could not unlink.';"

Perl -e "rmdir '-d' or die 'Could not rmdir.';"
11
Thomas L Holaday

Linux演练中,创建带有破折号和空格的文件,然后将其删除。

小心!请勿无意中运行rm -rf /或类似的层叠删除命令。

如果您要删除的文件中包含星号或斜杠,请不要无意中泵入. 要么 /* 要么 *或其他可能会级联删除您的操作系统的通配符。

创建一个名为“ --yo yo”的文件

[email protected] ~ $ touch -- "--yo yo"
[email protected] ~ $ ls
bin  --yo yo

首先,使用find:找到它

[email protected] ~ $ find . -name "*--yo yo*"
./--yo yo

确保find命令仅找到您要删除的一个文件:

然后传递-delete选项进行查找,将其删除:

[email protected] ~ $ find . -name "*--yo yo*" -delete
[email protected] ~ $ ls
bin  

啊,它走了。

8
Eric Leschinski

午夜指挥官(mc)是最简单的,只需指向它并按F8;)

2
Marcin

这是我在找到此线程之前使用的解决方案。
使用vim来“编辑”目录:

vim .

然后(在vim中)选择您的文件,点击del并确认删除。
完成后,使用:q退出vim

1
atti

您是否尝试将目录名称添加为前缀:

$ rm ./-filename.txt dirname/-filename2.txt
$ mv ./-filename.txt filename.txt
$ cp teste ./-teste

通常,使用目录作为文件的前缀有助于避免解析器功能将“减号”字符错误地解释为命令选项。