linux - 编译没有特定子串的文件

标签 linux bash shell

我是 bash 的新手,我想知道如何在某个目录中编译名称中不包含某些字符串的文件。所以说我有 gumbo.java jackson.java roosevelt.java roar.java 作为目录中的文件。如何编译名称中不包含 roar 或 gumbo 的文件?

最佳答案

在 bash 中,您可以像这样使用扩展的 glob 模式:

shopt -s extglob nullglob
printf '%s\n' !(roar|gumbo).java

这匹配除 roargumbo 之外的任何以 .java 结尾的内容。您可以将其视为 *.java,减去 roar.javagumbo.java

如果您对输出感到满意,请将 printf 替换为您用于编译的任何内容。

如果你想否定任何包含这些子字符串的东西,你可以添加一些星号:

printf '%s\n' !(*@(roar|gumbo)*).java

@() 匹配任何一个管道分隔的选项。和以前一样,整个事情都被 !() 否定了。

正如评论中所建议的那样,我还启用了 nullglob 以便空匹配项扩展为空。

关于linux - 编译没有特定子串的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45214728/

相关文章:

shell - 我可以在 Vagrant bootstrap shell 脚本中切换用户吗?

linux - 检查 IP 有效性

c - 汇编的 Linux 系统调用表或速查表

linux - 如何创建可在 Linux 和 OSX 上运行的 .bashrc 文件

c - fork() 使用不当?

bash - grep 通配符问题 ubuntu

linux - 定期检查文件夹是否已在目录中创建

linux - vagrant/ansible nginx 版本错误

linux - 为什么不同的环境在调用man -ls 时包含不同的命令行选项? (环境 : codecademy, cb.vu)

java - 如何从 Java 程序中调用 shell 脚本?