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 {} \;

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

Merci. Peut-on faire quelque chose de similaire en bash?
Jsheares
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.