如何获取每个子目录中与文件扩展名列表匹配的第一个文件?我的目标是仅对一系列子目录中的任何一个文件运行程序。
例如,下面有3个子目录。我想在 subdir1/file.dat、subdir2/file.d01 和 subdir3/file1.dat 上运行该程序,因为我想查找扩展名为 .dat 或 .d01 的文件。
subdir1 - file.dat, file.d01
subdir2 - file.d01, file.d02, file.d03
subdir3 - file1.dat, file2.dat
以下内容在一段时间内效果很好,直到我开始遇到像最后两个这样的目录。 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