2017-02-15 3 views
0

versuchen, Dateien in Verzeichnissen mit Wildcard * nachschlagen und setzen die Namen in einem Arraycsh Satz: keine Übereinstimmung Fehler Wildcard

die Dateien haben ähnliche Namen (MATCHr1, MATCHr2 ...)

die Problem entsteht, wenn die Datei nicht existiert (das ist eine Möglichkeit)

Satz Befehl gibt eine „no match“ Fehler und beendet die Schleife

wenn dies der Fall ist, wie kann ich es den Fehler behandeln, indem auf das springen nächste Iteration?

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[*] 

.... Rest Code funktioniert Inhalt Array verwenden Textdateien und funktioniert super zu schaffen, wenn die *${SEQR}*.nii.gz einen Namen Datei zurückgibt

aber schlägt fehl, wenn die keine Spiele mit dem Wildcard gemacht

Jede Hilfe gut

dank apreciated würde!

+0

Versuch eine Überprüfung auf Array-Größe hinzugefügt, nachdem Sie es ('wenn # $ Array definieren> 0') – user2141046

+0

wo? 'ls -l * $ {SEQR} *. ni.gz' gibt zurück: keine Übereinstimmung, erlaubt aber, dass der Code auf' set Array = * $ {SEQR} * .nii.gz 'weiterläuft, was ebenfalls keine Übereinstimmung ergibt, aber das Skript beendet und geht nicht weiter zum nächsten 'SEQR' – gijoeyjoe

+0

Sie können ls machen und das $ status (oder $ STATUS, hängt von Ihrem System) Flag abfragen:' ls -l * $ {SEQR} *. ni.gz >>/dev/Null ; wenn! $ status dann ... 'Ich bin jetzt nicht neben meiner Maschine, um die genaue Syntax zu überprüfen, aber das ist der Geist davon ... – user2141046

Antwort

0

Sie können Sie ls tun und die $ Status überprüfen (oder STATUS $, abhängig von Ihrem System) Flagge:
ls -l *${SEQR}*.nii.gz >> /dev/null ; if !$status then ...

Verwandte Themen