如何使用“cp”制作目录的多个副本?

如何使用“cp”制作目录的多个副本?

我正在运行 Debian GNU/Linux。

我运行了以下命令:

mkdir code

cp -Rf code code{1..255}

第一个 cmd 创建了一个名为的目录代码
第二个命令的目的是复制名为的文件夹代码代码1-代码255'

它的目的是复制文件夹代码 255 次......
相反,它说:

cp: target 'code255' is not a directory...

为什么这不起作用???

touch file{1..255} works fine!

那么为什么不呢cp

解决办法是什么?

=(

答案1

该命令的语法cp是:

cp [options] file copy-of-file

或者

cp [options] file1 file2... directory-to-copy-files-into

也就是说,它可以是一个复制到或者复制到

在上面的第一个概要中,它可以是其中之一。它是什么取决于是否copy-of-file已经存在并且是一个目录(或目录的符号链接),在这种情况下它是一个复制到或者不是,在这种情况下它是复制到1.

第二个概要始终是复制到。如果directory-to-copy-files-into不存在或者不是目录,您将收到错误消息。

就您而言,您的 shell 扩展了:

cp -Rf code code{1..255}

到:

cp -Rf code code1 code2 ... code255

那么你属于第二种情况,复制到并且您会收到错误,因为code255似乎不是可以将, , ...,文件cp复制到的目录。codecodecode254

无论如何cp都不会制作一个文件的多个副本。在这里,您需要调用cp您想要制作的每个副本,例如通过使用循环。

使用zshshell(该{1..255}语法的来源):

for f (code{1..255}) cp -R code $f

或者使用bashshell(复制该{1..255}操作符)并且您可能正在使用它,因为它是 Debian 上的默认用户交互式 shell:

for f in code{1..255}; do cp -R code "$f"; done

其他选项包括使用xargs

seq 255 | xargs -I{} cp -R code code{}

或者 POSIXly(在任何现代sh实现中):

i=1; while [ "$i" -le 255 ]; do cp -R code "code$i"; i=$((i + 1)); done

1, 一个复制到可以通过 with 或通过withcp file dir/的 GNU 实现来强制执行。 Acpcp -t dir file复制到可以通过 GNU 强制cp执行cp -T file copy-of-file

相关内容