排除以相同名称结尾的目录

时间:2020-02-17 09:39:40

标签: bash shell command-line

我正在尝试编写bash脚本以在目录中的每个文件夹中执行相同的命令。 在命令中,我运行python代码以创建新文件夹,并在每个文件夹的名称中添加“ _long”和“ _wavs”。

除了新创建的名称以“ _long”和“ _wavs”结尾的文件夹外,我需要在所有文件夹上运行命令。

这是我尝试过的:

dirs=($(find /Volumes/exchange -type d))

for dir in "${dirs[@]}/!(`basename "$dir"`_long|`basename "$dir"`_wavs)/";
do
   *commands*
done

2 个答案:

答案 0 :(得分:2)

一个简单的for循环,带有find,不包括具有某些名称的dirs:

for dir in $(find /Volumes/exchange -type d ! -name "*_wavs" ! -name "*_long") 
do  
    # commands on "$dir"  
done

答案 1 :(得分:2)

当您无法像@nullPointer的出色答案那样修改输入时,可以在循环内部进行检查:

for dir in "${dirs[@]}"; do
   [[ $dir =~ _long$|_wavs$ ]] && continue;
   *commands*
done
相关问题