2012-04-08 3 views
0

私はディレクトリ内のシーケンシャルファイルのリストにあるファイルが見つからない場合、そのファイルを移動する簡単なスクリプトを作成しようとしています。たとえば、 "1"、 "2"、 "3"、 "5"などのファイル名のディレクトリがある場合、 "3"を "4"、 "3"を "2"などに移動したい私は以下のコードを持っています。 UpperとLowerは、シフトしたい値に対応しています。上記の例を使用して、私は私が文句を言っている理由のMVはかなりわからないんだけど、次の出力mvがこのbashスクリプトで動作するのはなぜですか?

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 

を受けるLOWERは1になりますとUPPERは5

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 

だろう。どんなアイデアでも大歓迎です!

+1

コマンドをデバッグするには、単に "echo"という単語を 'mv'の前に追加します。あるいは、スクリプトの先頭に 'set -x'を追加してください。 – alexis

答えて

1

mvコマンドはローカルディレクトリのファイルを移動しようとしていますが、確認しているファイルは別の場所($DIRNAME)です。おそらく試してみてくださいmv "$DIRNAME/$n" "$DIRNAME/$y"

+0

私はばかです。それを指摘してくれてありがとう! – thomascirca

関連する問題