2012-04-08 133 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

相关问题