我有一个名为 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 的值,j
即2
,因此最终只有一个副本被命名2
(因为每个副本都会覆盖前一个副本)。该过程完成后,j
被重新分配给j+1
(echo $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
... P10
,P11
对于增量重命名,您可以执行类似的操作,假设副本没有编号......
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