[rm]在“ rm -rf filename [co]”命令中是什么意思?


16

假设我在中有两个文件/tmp

root@ubuntu:~# touch /tmp/hello.{pyc,py}

root@ubuntu:~# ls /tmp/
hello.py  hello.pyc

现在,让运行rm -rf带有[co]选项的命令

root@ubuntu:~# rm -rf /tmp/hello.py[co]

root@ubuntu:~# ls /tmp/
hello.py

有人可以解释一下这里发生了什么吗?是什么[co]参数?我们如何使它适用于其他扩展?说我有foo.jsfoo.coffee文件,我们可以做些rm -rf /tmp/foo.coffe[co]删除/tmp/foo.js吗?


8
那里没有必要-rf,因为它们既不是目录(--recursive),也不是不可写的(--force)。
deltab '16

13
不需要,-rf也不需要以root用户身份进行操作。尤其是当涉及的事情涉及时rm -rf
terdon

伙计们,它只是说明问题的示例命令。实际的问题是关于[co]外壳球的。谢谢。
aneeshep '16

8
@aneeshep如果有人低头看枪管并询问如何清洁枪管,您是否首先警告他们有关低头枪管或告诉他们如何清洁枪管的警告?
邓肯X辛普森

Answers:


34

[co]不是rm命令的参数-它是一个外壳glob,它与一个等于集合中单个字符的模式匹配[co]-换句话说,它与文件名的a coa 匹配。来自man bash

[...]  Matches any one of the enclosed characters

同时匹配foo.coffeefoo.js,因为后缀不包含在所有任何普通字符串,最好你可以做的是foo.*这将匹配任何文件名开头foo.相反,你可以使用大括号展开

rm foo.{coffee,js}

是的。我错过了bash;)的基本概念。谢谢:)
aneeshep '16

7
搜索模式,例如[abc]*搜索文件,{}不会。转到/ tmp,键入echo nya[ab]; echo nya{a,b},然后touch nyaa一次又一次echo nya[ab]; echo nya{a,b}
Sanya_Zol 2016年

16

它不是参数,而是字母的集合(或“ shell glob”)。这是一样的:

rm -rf /tmp/hello.py[co]

是相同的

rm -rf /tmp/hello.pyc
rm -rf /tmp/hello.pyo

类似...

rm -rf /tmp/hello.py[c-o]

/tmp/hello.pyc最多可以删除任何内容,包括/tmp/hello.pyo以下ASCII顺序。

rm -rf /tmp/hello.py[ab][cd]

会删除...

rm -rf /tmp/hello.pyac
rm -rf /tmp/hello.pyad
rm -rf /tmp/hello.pybc
rm -rf /tmp/hello.pybd

例如,我有foo.js和foo.coffee文件,我们可以做些rm -rf /tmp/foo.coffe[co]删除的操作吗/tmp/foo.js

您可以使用相当不错的方法,但是对于这2个文件,我只需要对每个文件使用1条命令将其删除。另一个例子是尽可能接近这两个文件...

rm /tmp/foo.[cj]*

将删除这样的文件...

rm /tmp/foo.c*
rm /tmp/foo.j*

因此它不仅仅包括这两个文件。


2
如果我没有误会,则rm -rf所有匹配项都会得到一个调用,而每个匹配项却不会得到很多调用。

1
是。但我没有添加rm的意图。这些只是为了显示需要输入的内容;-)
Rinzwind '16

1

这是一个外壳问题,类似于通配符,*并且?...在bash中,文件名模式*.[co]匹配以.c或结尾的所有文件名.o

*.[co]vs *.c *.o或or 的区别*.{c,o}在于,*.o如果.o目录中没有文件,则后两种模式将扩展为虚拟模式,而*.[co]版本则不存在。

Shell Glob对于以不区分大小写的方式执行文件操作很有用。例如,如果你有一个文件名结尾为一堆文件jpgJPGJpgJPg,等...你要删除所有的人,你可以这样做:

rm *.[Jj][Pp][Gg]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.