在bash for循环中排除两个或多个目录

问题描述

我的父目录中有一个名为 Stem 的父目录,我大约有20个子目录,而20个子目录的名称以 _a 结尾,每个子目录中有一个名为 violations.txt 的文件。在这20个子目录中,两个子目录分别是 Trans_a shift_a ,我不需要对这两个子目录执行任何脚本操作。 我只需要在18个子目录上执行脚本即可。

我尝试了以下代码,但未获得确切的输出。

#!/bin/bash
echo "These warning reports are based on this run directory:" ; pwd
echo " " ;
File="violatons.txt"
for d in *_a;
do
if ( "$d"=="Trans_a"||"shift_a" ); then
True
else
    Statement 
fi
done

注意:在某些情况下,我们需要在脚本中排除的子目录可能会增加或减少,这取决于具体情况。

解决方法

for f in !(Trans|shift)_a/violations.txt; do
    echo "$f"
    # do stuff
done

!(pattern-list)匹配给定模式之一以外的任何内容。

参考:https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Pattern-Matching

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...