Como você obtém o primeiro arquivo em cada subdiretório que corresponde a uma lista de extensões de arquivo?

4

Como você obtém o primeiro arquivo em cada subdiretório que corresponde a uma lista de extensões de arquivo? Meu objetivo é executar um programa em qualquer um dos arquivos em uma série de subdiretórios.

Por exemplo, abaixo há 3 subdiretórios. Eu quero executar o programa em subdir1 / file.dat, subdir2 / file.d01 e subdir3 / file1.dat, dado que eu quero encontrar arquivos que tenham extensão .dat ou .d01.

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

O seguinte funcionou muito bem por algum tempo, até que comecei a encontrar diretórios como os dois últimos. subdir3 é problemático, já que todos os arquivos acabam sendo processados.

find . -name "*.dat" -exec mixb {} \;
    
por jsheares 13.02.2015 / 00:30

1 resposta

4

com zsh :

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

O bash equivalente seria algo como:

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