-
?我被放入远程OSX服务器中,并且该文件位于我的目录中:这个问题有时会以不同的形式出现,这些文件易于创建,但很难消除。
我尝试使用反斜杠
tohru:~ $ ls -l
total 8
-rw-r--r-- 1 me staff 1352 Aug 18 14:33 --help
...
我尝试使用引号
rm \-\-help
如何防止减号(连字符或连字符)被解释为选项?
#1 楼
使用“-”使rm停止解析命令行选项,如下所示:rm -- --help
评论
我知道这很简单...
–布莱恩·瑞贝因(Bryan Rehbein)
2010年9月2日,19:37
rm命令的所有版本都支持-参数吗?
–基思·汤普森(Keith Thompson)
2011年12月6日7:18
@KeithThompson-是大多数GNU工具的功能,因此它不适用于大多数非GNU(“非Linux”)Unix(例如BSD变体或某些嵌入式系统)
– dtech
2013年4月6日17:00
谢谢!那挽救了我的一天。当然,它可以在BSD(OSX)和其他命令上运行!
– raskhadafi
2013年12月2日8:46
@ dtech,getopt()和-早于GNU(SysIII,1980),是标准/ POSIX。除了一些例外情况(例如echo),标准实用程序都了解-。如果其他命令未使用getopt()API解析选项,则为YMMV。
–StéphaneChazelas
2015年6月17日12:08
#2 楼
或者您可以rm ./--help
评论
这是我记得的那个。我总是必须使用“ rm---help”。
–user603
2010-09-21 4:12
即使对于不予处理的命令,此方法也始终有效-特别是。
– jw013
2011-12-26 21:47
而且它还可以避免某些命令对某些类型的特殊命名参数(如选项旁边)进行特殊处理,例如文本实用程序或cd的-,awk的foo = bar ...
–StéphaneChazelas
15年6月17日在10:31
当文件以单破折号开头(rm-
– StockB
17年10月31日在14:31
不错的解决方案,还可以提供帮助:mv ./--help / tmp /
– muenalan
18年4月21日在5:52
#3 楼
使用find
可以做到这一点:find . -name '--help' -delete
这是一个很好的方法,因为如果您有更多这样的文件,可以删除这些文件,就可以得到一个预览列表。通过简单地先运行没有
-delete
选项的find命令来查找文件,然后如果文件列表看起来不错,只需使用-delete
再次运行它即可。首先预览)是一个好习惯,它将帮助您避免因rm
错误而终日难免咬伤您。请注意,该查找将遍历所有子目录,因此您可能需要运行它具有子目录深度约束,如下所示:
find . -maxdepth 1 -name '--help' -delete
将查找限制为当前目录。
评论
可移植的是,您需要找到要查找的文件/目录的列表。所以找到。 -name .... -delete和-maxdepth也不是标准选项。
–StéphaneChazelas
15年6月17日在12:17
#4 楼
Vegar Nilsen和edfuh的答案非常好,并且是对这样的问题的正确解决方案。我确实想对此问题添加一个一般性的答复,使您可以删除任何包含困难文件的文件名称。首先使用
ls -i
或某种形式的stat
获得其inode编号,然后通过使用inode编号在当前目录中搜索文件并在具有匹配的inode编号的文件上执行rm
命令来删除该文件,find . -inode <inode> -exec rm {}\;
由于inode号在每个文件系统中都是唯一的,因此您可以使用此文件来删除任何文件; unicode或使用转义字符。这是非常烦人的输入方式,所以如果您使用bash,我建议将
TAB: menu-complete # Tab: Cycles through the command
"\e[Z": menu-complete-backward # Shift-Tab: Cycles backwards
这行添加到您的
.inputrc
文件中。这使您可以循环浏览可能的完成列表(以获取更多信息)。评论
这种方式有两个问题:1)可以使用-delete时不要使用-exec rm; 2)获得inode并使用它时,您只需使用它就可以使它变得过于复杂:find -name'--help'-delete
– aculich
2011年12月6日在1:36
我认为那行不通。它遍历当前目录及其所有子目录中的所有文件,并且毕竟它仍然调用rm --help,它仍然不会删除该文件。只需使用rm ./-- help(或rm -i *。
–基思·汤普森(Keith Thompson)
2011年12月6日,7:16
@KeithThompson find在所有文件的命令行参数路径之前添加前缀,因此它将运行rm ./--help和rm ./sub/dirs/--help。要解决第二个问题,必须添加-maxdepth 1,但是所有这些本质上都是以一种更加round回,复杂的方式应用@edfuh的解决方案,无论如何,-delete比-exec rm更安全。
– jw013
2011-12-26 21:39
此命令的另一个问题是{}和\;之间必须有一个空格,否则它将不起作用。
– Eugene S
2012年5月22日14:08
索引节点可能是唯一的,但是可能有多个目录条目具有相同的索引节点。这些称为硬链接。而且它们在每个文件系统中都是唯一的,因此您需要使用-xdev。那不会帮助您运行ls -i --help。
–StéphaneChazelas
15年6月17日在12:16
#5 楼
一个残酷的解决方案:perl -e "unlink '--help' or die 'Could not unlink.';"
perl -e "rmdir '-d' or die 'Could not rmdir.';"
#6 楼
Linux演练:创建一个包含破折号和空格的文件,然后将其删除。注意!不要意外地运行
rm -rf /
或类似的级联删除命令。如果要删除的文件中包含星号或斜杠,请不要意外地泵入
.
或/*
或*
或一些其他通配符级联删除您的操作系统。 创建一个名为“ --yo yo”的文件
eric@dev ~ $ touch -- "--yo yo"
eric@dev ~ $ ls
bin --yo yo
首先,使用以下命令找到它:
eric@dev ~ $ find . -name "*--yo yo*"
./--yo yo
确保find命令仅找到要删除的一个文件:
,然后传递-delete选项进行查找,将其删除:
eric@dev ~ $ find . -name "*--yo yo*" -delete
eric@dev ~ $ ls
bin
它消失了。
#7 楼
午夜指挥官(mc
)是最简单的,只需指向它并按F8即可;)评论
OP需要命令行(CLI)解决方案。
–user22304
2012年9月14日下午13:11
Midnight Commander是一种CLI解决方案。只需使用您的软件包管理器进行安装即可。 (甚至可以在ssh上使用...)en.wikipedia.org/wiki/Midnight_Commander
– daviewales
2013年9月20日下午0:41
apt-get install mc ||如何yum install mc; mc各种箭头键和F8比rm ./--帮助容易吗?
–乔什
2014年12月11日下午16:33
@daviewales:Midnight Commander是从命令行启动的,并且在终端中运行,但是Midnight Commander中的所有键盘操作都不来自CLI(命令行界面),而是来自Midnight Commander的界面。 -通常,命令行实用程序可以在脚本中运行(bash命令行历史记录是一个例外)
– Peter.O
2015年8月17日在21:33
#8 楼
这是我在找到此线程之前使用的解决方案。使用
vim
到'edit'目录:点击del并确认删除。完成后,用
:q
退出vim #9 楼
您是否尝试过将目录名称添加为前缀:$ rm ./-filename.txt dirname/-filename2.txt
$ mv ./-filename.txt filename.txt
$ cp teste ./-teste
通常,使用目录作为文件的前缀有助于避免错误地将“减号”解释为解析器功能提供的命令选项。
评论
我相信先前的答案已经涵盖了这一点。
– Kusalananda♦
18年4月4日在11:37
#10 楼
如果要重命名文件-.bar
(mv无法工作),请尝试以下操作:cat >foo.bar <-.bar
,然后再使用命令:
rm -- -.bar
您应该能够在foo.bar中检查原始文件的内容
评论
复制文件不是重命名文件的非常有效的解决方案。
– jw013
2011-12-26 21:42
您可以使用vidir;但这可能效率低下(甚至更高),而且更加危险。
–斯蒂芬·梅纳斯(Stephen Menasian)
2011-12-27在0:22
评论
如果将此问题重命名为“如何删除名称以-开头的文件”,那就太好了。@桑迪同意;我通常不喜欢更改问题的含义,但是在这种情况下,可接受的答案特定于此问题。
我发现rm --help确实解释了如何删除以-开头的文件名,这有点讽刺。还是好问题。
@ jw013有时,有经验的用户可以轻松地获得帮助,但对于新手来说却不知所措。
我在使用BusyBox的rm的系统上遇到了这个问题。一切都很少,包括帮助,所以rm --help没有提供任何线索。