Bash

你如何獲得每個子目錄中與文件副檔名列表匹配的第一個文件?

  • February 13, 2015

你如何獲得每個子目錄中與文件副檔名列表匹配的第一個文件?我的目標是在一系列子目錄中的任何一個文件上執行程序。

例如,下面有 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 {} \;

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

引用自:https://unix.stackexchange.com/questions/184588