2012-04-08 12 views
0

Ich versuche, ein einfaches Skript zu schreiben, das Dateien in einer Liste von sequenziellen Dateien in einem Verzeichnis verschieben wird, wenn eines fehlt. Wenn ich zum Beispiel ein Verzeichnis mit Dateien mit den Namen "1", "2", "3", "5" usw. habe, möchte ich "3" auf "4", "3" auf "2" usw Ich habe den folgenden Code unten. Upper und Lower entsprechen den Werten, die ich durchschalten möchte. Im obigen Beispiel würde LOWER 1 und UPPER würde 5.Warum funktioniert mv in diesem Bash-Skript?

for z in $(eval echo {$UPPER..$LOWER}) ; do   
     checkfile $DIRNAME $z #Returns -1 on file missing 
     if [[ $? -ne 0 ]]; then 
      echo "Found bad match" 
      for y in $(eval echo {$z..$LOWER}) ; do 
       n=$(($y - 1)) 
       echo "$y $n" 
       mv "$n" "$y" 
      done 
      exit 0 
     fi 
done 

sein erhalte ich folgende Ausgabe

Found bad match 
18 17 
mv: cannot stat `17': No such file or directory 
17 16 
mv: cannot stat `16': No such file or directory 
16 15 
mv: cannot stat `15': No such file or directory 
15 14 
mv: cannot stat `14': No such file or directory 

Ich bin mir nicht ganz sicher, warum mv beschwert wird. Irgendwelche Ideen würden sehr geschätzt werden!

+1

Um Ihren Befehl zu debuggen, fügen Sie einfach das Wort "echo" vor 'mv' hinzu. Oder fügen Sie 'set -x' am Anfang des Skripts hinzu. – alexis

Antwort

1

Ihr mv Befehl versucht, Dateien in Ihrem lokalen Verzeichnis zu verschieben, aber die Dateien, die Sie überprüfen, befinden sich woanders (in $DIRNAME). Vielleicht versuchen Sie mv "$DIRNAME/$n" "$DIRNAME/$y"?

+0

Ich bin ein Idiot. Danke, dass du das unterstrichen hast! – thomascirca

Verwandte Themen