首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译不带某些子字符串的文件

编译不带某些子字符串的文件
EN

Stack Overflow用户
提问于 2017-07-20 20:28:34
回答 3查看 21关注 0票数 1

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

EN

回答 3

Stack Overflow用户

发布于 2017-07-20 20:32:26

在bash中,您可以使用如下所示的扩展glob模式:

代码语言:javascript
复制
shopt -s extglob nullglob
printf '%s\n' !(roar|gumbo).java

这将匹配除roargumbo之外的任何以.java结尾的值。你可以把它想象成*.java,去掉roar.javagumbo.java

如果您对输出满意,请用printf替换您用来编译的任何内容。

如果您想要否定包含这些子字符串的任何内容,可以添加一些星号:

代码语言:javascript
复制
printf '%s\n' !(*@(roar|gumbo)*).java

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

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

票数 2
EN

Stack Overflow用户

发布于 2017-07-20 20:44:34

尝试使用find命令:

代码语言:javascript
复制
find . -type f -not -name '*roar*' -and -not -name '*gumbo*' -exec <command> {} \;

例如:

代码语言:javascript
复制
find . -type f -not -name '*roar*' -and -not -name '*gumbo*' -exec javac {} \;
票数 0
EN

Stack Overflow用户

发布于 2017-07-20 20:46:02

我将使用标准循环:

代码语言:javascript
复制
for file in *.java; do
  case $file in
  *roar*|*gumbo*) continue;;
  *) javac "$file";;
  esac
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45214728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档