ファイル拡張子のリストに一致する各サブディレクトリの最初のファイルを取得するには?

ファイル拡張子のリストに一致する各サブディレクトリの最初のファイルを取得するには?

ファイル拡張子のリストに一致する各サブディレクトリの最初のファイルを取得するには?私の目標は、一連のサブディレクトリにある1つのファイルでのみプログラムを実行することです。

たとえば、以下には3つのサブディレクトリがあります。 .datまたは.d01拡張子を持つファイルを探したいので、subdir1 / file.dat、subdir2 / file.d01、およびsubdir3 / file1.datでプログラムを実行したいと思います。

subdir1 - file.dat, file.d01    
subdir2 - file.d01, file.d02, file.d03    
subdir3 - file1.dat, file2.dat

以下は、最後の2つのディレクトリと同じディレクトリの実行を開始するまでしばらくうまくいきました。 subdir3は最終的にすべてのファイルが処理されるので問題になります。

find . -name "*.dat" -exec mixb {} \;

答え1

そしてzsh

for d (subdir*(/)) mixb $d/*.(dat|d01)([1])

これに対応するbashものは次のとおりです。

shopt -s nullglob extglob
for d in subdir*/; do
  [ -L "${d%/}" ] && continue
  set -- "$d"*.@(dat|d01)
  [ "$#" -eq 0 ] || mixb "$1"
done

関連情報