ane*_*hep 16 command-line bash rm
假设我有两个文件/tmp:
root@ubuntu:~# touch /tmp/hello.{pyc,py}
root@ubuntu:~# ls /tmp/
hello.py hello.pyc
Run Code Online (Sandbox Code Playgroud)
现在,让我们rm -rf使用 [co] 选项运行命令
root@ubuntu:~# rm -rf /tmp/hello.py[co]
root@ubuntu:~# ls /tmp/
hello.py
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这里发生了什么吗?[co]参数是什么?我们如何使它适用于其他扩展?说我有foo.js和foo.coffee文件,我们可以做一些事情rm -rf /tmp/foo.coffe[co]来删除/tmp/foo.js吗?
ste*_*ver 35
[co]不是rm命令的参数——它是一个shell glob,它匹配等于集合中单个字符的模式[co]——换句话说,它匹配文件名的结尾ac或oa。来自man bash:
[...] Matches any one of the enclosed characters
Run Code Online (Sandbox Code Playgroud)
要匹配foo.coffeeand foo.js,因为后缀根本不包含任何公共子字符串,所以你能做的最好的事情是foo.*匹配以开头的任何文件名,foo.你可以使用大括号扩展,例如
rm foo.{coffee,js}
Run Code Online (Sandbox Code Playgroud)
Rin*_*ind 16
它不是一个参数,而是一组字母(或“shell glob”)。这是一样的:
rm -rf /tmp/hello.py[co]
Run Code Online (Sandbox Code Playgroud)
是相同的
rm -rf /tmp/hello.pyc
rm -rf /tmp/hello.pyo
Run Code Online (Sandbox Code Playgroud)
相似的 ...
rm -rf /tmp/hello.py[c-o]
Run Code Online (Sandbox Code Playgroud)
将删除从以下 ASCII 顺序/tmp/hello.pyc开始(包括/tmp/hello.pyo以下内容)的任何内容。
rm -rf /tmp/hello.py[ab][cd]
Run Code Online (Sandbox Code Playgroud)
将删除...
rm -rf /tmp/hello.pyac
rm -rf /tmp/hello.pyad
rm -rf /tmp/hello.pybc
rm -rf /tmp/hello.pybd
Run Code Online (Sandbox Code Playgroud)
比如说,我有 foo.js 和 foo.coffee 文件,我们能不能做点什么
rm -rf /tmp/foo.coffe[co]来删除/tmp/foo.js.
您可以制作相当奇特的方法,但对于这 2 个文件,我只需为每个文件删除 1 个命令。另一个例子是尽可能接近这两个文件......
rm /tmp/foo.[cj]*
Run Code Online (Sandbox Code Playgroud)
会删除这样的文件...
rm /tmp/foo.c*
rm /tmp/foo.j*
Run Code Online (Sandbox Code Playgroud)
所以它包含的不仅仅是这两个文件。