Comment obtenez-vous le premier fichier dans chaque sous-répertoire correspondant à une liste d'extensions de fichier?

4

Comment obtenez-vous le premier fichier dans chaque sous-répertoire correspondant à une liste d'extensions de fichier? Mon objectif est d'exécuter un programme sur n'importe lequel des fichiers d'une série de sous-répertoires.

Par exemple, ci-dessous, il y a 3 sous-répertoires. Je veux exécuter le programme sur subdir1 / file.dat, subdir2 / file.d01 et subdir3 / file1.dat étant donné que je veux trouver des fichiers ayant l'extension .dat ou .d01.

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

Ce qui suit a très bien fonctionné pendant un certain temps, jusqu'à ce que je commence à rencontrer des annuaires comme les deux derniers. subdir3 est problématique, car tous les fichiers finissent par être traités.

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

Réponses:

4

Avec zsh:

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

L' bashéquivalent serait quelque chose comme:

shopt -s nullglob extglob
for d in subdir*/; do
  [ -L "${d%/}" ] && continue
  set -- "$d"*.@(dat|d01)
  [ "$#" -eq 0 ] || mixb "$1"
done
Stéphane Chazelas
la source
Merci. Peut-on faire quelque chose de similaire en bash?
Jsheares