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生成从$last2递增的数字序列-1
  • 我正在使用seq而不是大括号扩展,因为后者不会在您拥有时扩展数字{$last .. 1}
于 2012-10-28T04:17:37.650 回答