0

これは簡単に任意の言語にすることができます...しかし、私は今のところbashを使用しています。言語間で複製できる、この背後にある理解を探しています。

それで...

ディレクトリツリーのファイルをコピーして、そのファイルを別のファイルに置き換えています。

     cp "$DIR"/folder2/file2 "$DIR";
     mv "$DIR"/folder1/file1 "$DIR"/folder2/file2;

次に、コピーしたファイルを別のフォルダーに移動し、同じダンスを開始します。

     cp "$DIR"/folder3/file3 "$DIR";
     mv "$DIR"/file2 "$DIR"/folder3/file3

これを100回以上やりたいです。

最もエレガントな方法は何ですか?

エレガントで、簡潔で他の誰かが理解できるという意味で。

4

2 に答える 2

5
for i in {1..100}; do
    j=$((i+1))

    cp "$DIR"/folder$j/file$j "$DIR"
    mv "$DIR"/folder$i/file$i "$DIR"/folder$j/file$j
done
于 2012-10-26T20:25:36.903 に答える
1

あなたはしようとしています:

  1. バックアップファイル B.
  2. ファイル A をファイル B に名前変更 (または移動) します。
  3. バックアップファイル C.
  4. ファイル B のバックアップの名前をファイル C に変更します。
  5. バックアップファイル D.
  6. ファイル C のバックアップの名前をファイル D に変更します。

等々。

実際には、最後のファイルのみをバックアップする必要があるように、逆方向に実行する方が簡単です。

last=100
mv "$DIR/folder$last/file$last" "$DIR"
for i in $(seq $last -1 2); do
  mv "$DIR/folder$((i-1))/file$((i-1))" "$DIR/folder$i/file$i"
done 

ノート:

  • seq $last -1 2$lastからまでの数列を の2増分で生成します-1
  • ブレース展開の代わりに使用してseqいるのは、ブレース展開は数値を展開しないためです。{$last .. 1}
于 2012-10-28T04:17:37.650 に答える