列出不包含具有可变前缀的文件的目录

我正在检查脚本的输出。 在某些情况下,脚本失败了,某个文件还没有被生成。 我想检查这个文件是否存在于一个目录中,如果不存在,打印目录名称。 目录看起来像:

6680_4#22_SMALT 

_SMALT之前的所有数字都是可变的(它们是一个唯一的标识符),目录中的文件将如下所示:

 6680_4#22.bam 

在这种情况下, .bam之前的数字是可变的(它们将匹配目录的前缀,即_SMALT之前的id)。 有类似的问题发布,但我不熟悉bash脚本。 一些解释将是有用的,而且,我的问题似乎更复杂的事实是文件名称的前缀更改。 任何帮助将不胜感激。

像这样的东西可以工作:

 for dir in `find ./serverfault -maxdepth 1 -type d` do find_output=$( find ${dir} -type f -name "*#*_SMALT" ) test -z "${find_output}" && echo $dir done 

这个for循环执行以下操作:

  1. 获取指定位置的目录列表。
  2. 对于每个目录运行find命令来查找所需的文件名。
  3. 检查find命令的输出是否为空。 如果是打印目录名称。

为了得到相反的结果,使用test -n来检查find命令的输出是否find了一些东西。

编辑 :我完全误解了这个问题,所以我重写了我的答案。