我是 bash 的新手,我想知道如何在某个目录中编译名称中不包含某些字符串的文件。所以说我有 gumbo.java jackson.java roosevelt.java roar.java 作为目录中的文件。如何编译名称中不包含 roar 或 gumbo 的文件?
最佳答案
在 bash 中,您可以像这样使用扩展的 glob 模式:
shopt -s extglob nullglob
printf '%s\n' !(roar|gumbo).java
这匹配除 roar
或 gumbo
之外的任何以 .java
结尾的内容。您可以将其视为 *.java
,减去 roar.java
和 gumbo.java
。
如果您对输出感到满意,请将 printf
替换为您用于编译的任何内容。
如果你想否定任何包含这些子字符串的东西,你可以添加一些星号:
printf '%s\n' !(*@(roar|gumbo)*).java
@()
匹配任何一个管道分隔的选项。和以前一样,整个事情都被 !()
否定了。
正如评论中所建议的那样,我还启用了 nullglob
以便空匹配项扩展为空。
关于linux - 编译没有特定子串的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45214728/