Dans l'un de mes scripts Bash j'ai répété deux fois ce code:Comment éviter de telles duplications de code dans un script Bash?
find "$source_dir" -type f \
-iname "*.arw" \
-or -iname "*.cr2" \
-or -iname "*.crw" \
-or -iname "*.jpeg" \
-or -iname "*.jpg" \
-or -iname "*.nef" \
-or -iname "*.nrw" \
-or -iname "*.orf" \
-or -iname "*.pef" \
-or -iname "*.png" \
-or -iname "*.ptx" \
-or -iname "*.raf" \
-or -iname "*.raw" \
-or -iname "*.rw2" \
-or -iname "*.sr2" \
-or -iname "*.srf" \
-or -iname "*.srw" \
-or -iname "*.tif" \
-or -iname "*.tiff" \
-or -iname "*.x3f" | (
counter=0
while read image_file; do
(...)
Il en existe deux find
commandes effectuées sur les deux répertoires différents, mais avec les mêmes paramètres. Les résultats de chaque découverte sont traités de différentes manières. Je suis convaincu qu'il est possible d'éviter la duplication de code ici. Existe-t-il un moyen d'enrouler cette commande find
dans une fonction qui stocke les résultats de recherche dans une structure de données? Cette structure de données doit être transmise au sous-shell qui itère sur ses éléments. Comment puis-je atteindre cet objectif?
Si votre version de 'find' supporte, vous pouvez réduire considérablement la longueur de la commande: 'find" $ source_dir "-type f -iregex" *. (cr2 | crw | jpeg | ... | x3f) $ "'. – chepner
De plus, techniquement, le prédicat '-type f' ne s'applique qu'aux fichiers' arw'; vous voulez probablement quelque chose comme 'find ... -type f \ (-iname" * .arw "-o -iname" * .cr2 -o ... \) '. – chepner