我是bash的新手,我想知道如何在某个目录中编译不包含名称中某些字符串的文件。所以说我有gumbo.java jackson.java roosevelt.java roar.java作为我目录中的文件。如何编译名称中不包含咆哮或浓汤的文件?
答案 0 :(得分:2)
在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
,以便空匹配扩展为空。
答案 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