我有几个具有相同基本文件名的文件。我想删除除一个以外的所有
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
Run Code Online (Sandbox Code Playgroud)
如果我不需要保留一个,我知道我可以使用rm foo.*.
TLDP演示^否定匹配。通过反复试验,我发现
rm foo.*[^org]
Run Code Online (Sandbox Code Playgroud)
做我需要的,但我不太了解语法。
此外,虽然在我的用例中不是限制,但我认为这种模式也忽略了foo.o和foo.or。这种模式是如何工作的,一个只 忽略的 globfoo.org会是什么样子?
gle*_*man 89
shopt -s extglob
echo rm foo.!(org)
Run Code Online (Sandbox Code Playgroud)
这是“福”。后跟任何非“组织”
参考:https : //www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching
miv*_*ivk 34
在 bash 中,您还可以使用GLOBIGNORE="*.org" rm -i foo*.
而unset GLOBIGNORE当完成。
它并不比 好shopt -s extglob,但我发现它更容易记住。
Ado*_*obe 11
一根管子能干什么?
ls * | grep -v "foo.org" | xargs -I {} echo {}
Run Code Online (Sandbox Code Playgroud)
(显然你可能想在最后一个链中用 rm 替换 echo )。
| 归档时间: |
|
| 查看次数: |
88000 次 |
| 最近记录: |