编译没有特定子字符串的文件

时间:2017-07-20 12:28:34

标签: linux bash shell

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

3 个答案:

答案 0 :(得分:2)

在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,以便空匹配扩展为空。

答案 1 :(得分:0)

尝试使用find命令:

find . -type f -not -name '*roar*' -and -not -name '*gumbo*' -exec <command> {} \;

例如:

find . -type f -not -name '*roar*' -and -not -name '*gumbo*' -exec javac {} \;

答案 2 :(得分:0)

我会使用标准循环:

for file in *.java; do
  case $file in
  *roar*|*gumbo*) continue;;
  *) javac "$file";;
  esac
done