重复说明bash脚本

时间:2012-10-26 20:17:52

标签: bash loops scripting

这很容易就可以了......但我现在正在使用bash。我正在寻找可以在langs中复制的背后的理解。

所以...

我正在将文件复制到目录树中,而不是用另一个文件替换该文件。

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

然后我将复制的文件移到另一个文件夹中......开始相同的舞蹈。

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

我想这样做100次+。

最优雅的方式是什么?

优雅,在其他人的简短和易懂的意义上。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你正试图:

  1. 备份文件B.
  2. 将文件A重命名(或移动)为文件B.
  3. 备份文件C.
  4. 将文件B的备份重命名为文件C.
  5. 备份文件D.
  6. 将文件C的备份重命名为文件D.
  7. 等等。

    向后执行它实际上更容易,因此您只需要备份最后一个文件。

    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}
    • 时不会扩展数字