Linux 我需要使用bash创建一个文件夹目录列表,其中不包含具有特定名称的文件

Linux 我需要使用bash创建一个文件夹目录列表,其中不包含具有特定名称的文件,linux,bash,shell,Linux,Bash,Shell,问题: 我正在运行大量模拟(~14000),每个模拟如果执行正确,应该会生成10个不同的文件和一个包含3个文件的文件夹。 有时,如果模拟没有正确执行,它将跳过该模拟并继续其他模拟。因此,它不会生成名为“flow.dat”的文件。我的目录树的一个小例子是: Air_Z10_A2 +-- Des1 | +-- 05000800 | | +-- flow.dat | | +-- mesh.dat | +-- 05000850 | | +-- flow.dat | |

问题: 我正在运行大量模拟(~14000),每个模拟如果执行正确,应该会生成10个不同的文件和一个包含3个文件的文件夹。 有时,如果模拟没有正确执行,它将跳过该模拟并继续其他模拟。因此,它不会生成名为“flow.dat”的文件。我的目录树的一个小例子是:

Air_Z10_A2
+-- Des1
|   +-- 05000800
|   |   +-- flow.dat
|   |   +-- mesh.dat
|   +-- 05000850
|   |   +-- flow.dat
|   |   +-- mesh.dat
+-- Des2
|   +-- 05000800
|   |   +-- mesh.dat
|   +-- 05000850
|   |   +-- flow.dat
|   |   +-- mesh.dat
Air_Z10_A3
+-- Des1
|   +-- 05000800
|   |   +-- flow.dat
|   |   +-- mesh.dat
+-- Des2
|   +-- 05000850
|   |   +-- mesh.dat
问题: 我想使用bash生成一个列表,列出不包含flow.dat的所有目录(文件夹名称及其路径),这样我就知道哪些特定案例没有运行。所以基本上是一种方法,它会以以下形式给我输出:

/home/usr/documents/Air_Z10_A2/Des2/05000800
/home/usr/documents/Air_Z10_A3/Des2/05000850

提前谢谢你的帮助

使用
bash
shell和其他实用程序,这可能会实现您想要的功能

#/usr/bin/env bash

grep-Fvf因为您有一个非常规则的目录结构,并且知道文件的命名模式,所以您可以

diff  <(find Air* -name flow.dat -exec dirname {} \;|sort) <(ls -d Air*/Des*/[0-9]*)
diff有一种快速有效的方法:
查找包含
mesh.dat
但不包含
flow.dat
的所有目录

find . -type f -name mesh.dat -exec bash -c '
    for i;do
        [ -f ${i%/*}/flow.dat ] || echo ${i%/*};
    done
  ' - {}   +
作为一项功能:

missingFlow () { 
    find $1 -type f -name mesh.dat -exec bash -c '
    for i;do
        [ -f ${i%/*}/flow.dat ] || echo ${i%/*};
    done
  ' - {} +
}
然后


为了获得更好的帮助,您能否更具体地添加一个具有代表性的目录树、该树的预期输出,以及理想情况下您尝试了什么以及失败的具体程度?您是否已经尝试了什么?请出示您的密码!
missingFlow () { 
    find $1 -type f -name mesh.dat -exec bash -c '
    for i;do
        [ -f ${i%/*}/flow.dat ] || echo ${i%/*};
    done
  ' - {} +
}
missingFlow /tmp/usr/documents/
/tmp/usr/documents/Air_Z10_A3/Des2/05000850
/tmp/usr/documents/Air_Z10_A2/Des2/05000800