2017-02-15 2 views
0

essayant de rechercher des fichiers dans des répertoires avec * générique, et mettre les noms dans un tableaucsh jeu: aucune erreur de caractère générique correspondant

les fichiers ont des noms similaires (MATCHr1, MATCHr2 ...)

la problème se pose lorsque le fichier n'existe pas (ce qui est une possibilité)

commande

set renvoie une erreur « pas de correspondance » et se termine la boucle

si cela se produit comment puis-je obtenir gérer l'erreur en sautant à la prochaine itération?

set SUBIDS = (10003 10005 10006) 

foreach SUBID ($SUBIDS) 

foreach SEQR (MATCH ENC NBACK SIMON FACE) 

ls -l *${SEQR}*.nii.gz 

set Array = *${SEQR}*.nii.gz 

echo $Array[*] 

.... reste du code fonctionne pour utiliser le contenu de Array pour créer des fichiers texte et fonctionne très bien lorsque le *${SEQR}*.nii.gz retourne un nom de fichier

mais échoue lorsque les matchs sont pas faits avec le caractère générique

Toute aide serait bien aprécié

merci!

+0

essayer d'ajouter un contrôle sur la taille du tableau après que vous définissez ('si # $ array> 0') – user2141046

+0

où? 'ls -l * $ {SEQR} *. nii.gz' renvoie: pas de correspondance mais permet au code de continuer sur' set Array = * $ {SEQR} *. nii.gz' qui ne renvoie pas non plus de correspondance mais le script se termine et ne continue pas à la prochaine 'SEQR' – gijoeyjoe

+0

vous pouvez vous faire ls et vérifier le statut $ (ou $ STATUS, dépend de votre système) flag: 'ls -l * $ {SEQR} *. nii.gz >>/dev/nul ; if! $ status then ... 'Je ne suis pas à côté de ma machine maintenant pour vérifier la syntaxe exacte, mais c'est l'esprit ... – user2141046

Répondre

0

vous pouvez faire vous ls et vérifier l'état de $ (ou $ ÉTAT, dépend de votre système) Drapeau:
ls -l *${SEQR}*.nii.gz >> /dev/null ; if !$status then ...