2012-04-08 85 views
0

我想寫一個簡單的腳本,將文件移動到目錄中的順序文件列表中(如果缺少的話)。例如,如果我有一個名爲「1」,「2」,「3」,「5」等文件的目錄,我想將「3」移動到「4」,「3」到「2」等。我有下面的代碼。 Upper和Lower對應於我想要轉換的值。使用上面的例子,LOWER是1和上會5爲什麼mv在這個bash腳本中工作?

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 

我收到以下輸出

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 

我不明白爲什麼MV是抱怨。任何想法將不勝感激!

+1

要調試你的命令,只需在'mv'前面加上「echo」一詞。或者在腳本的頂部添加'set -x'。 – alexis 2012-04-08 20:57:38

回答

1

您的mv命令嘗試移動本地目錄中的文件,但您檢查的文件位於其他位置(位於$DIRNAME)。也許試試mv "$DIRNAME/$n" "$DIRNAME/$y"

+0

我是個白癡。感謝您指出了這一點! – thomascirca 2012-04-08 21:11:47

相關問題