逐步复制和重命名文件夹

逐步复制和重命名文件夹

我有一个名为 P1 的文件夹。我怎样才能复制该文件夹的 59 个副本并以递增方式命名它们,即新文件夹命名为 P2、P3、...、P60?

这是我所做的,但没有效果:
我手动制作了 59 份副本,然后尝试使用以下命令重命名它们:

j=2;for f in /path/to/folders/*; do mv "$f" "$j"; let j=j+1; done

但相反,我复制的所有文件(包括原始文件)都被从目录中删除了。

我写的命令有什么问题?我如何才能自动完成所有复制和重命名?

答案1

在您的命令中,目录首先被重命名为 var 的值,j2,因此最终只有一个副本被命名2(因为每个副本都会覆盖前一个副本)。该过程完成后,j被重新分配给j+1echo $j返回3) - 它不会增加。

要复印 59 份,您可以这样做:

for i in {2..60}; do cp -r -- P1 P"$i"; done

{2..60}扩展到 2 3 4 5 6 7 一直到 60

对于固定宽度的数字(因此排序时 02 位于 11 之前)使用printf

for i in {2..60}; do cp -r -- P1 P$(printf %02d "$i"); done

这给出了P02 P03 P04... P10P11


对于增量重命名,您可以执行类似的操作,假设副本没有编号......

j=0; for dir in /path/to/stuff/*; do mv -v -- "$dir" "$dir""$((++j))"; done

固定宽度格式:

j=0; for dir in /path/to/stuff/*; do printf -v new "$dir%02d" "$((++j))"; mv -v -- "$dir" "$new"; done

也许值得让最后一个更具可读性......

j=0
for dir in /where/my/stuff/is/*
  do printf -v new "$dir%02d" "$((++j))"
  mv -v -- "$dir" "$new"
done

相关内容