我正在运行 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
复制到的目录。code
code
code254
无论如何cp
都不会制作一个文件的多个副本。在这里,您需要调用cp
您想要制作的每个副本,例如通过使用循环。
使用zsh
shell(该{1..255}
语法的来源):
for f (code{1..255}) cp -R code $f
或者使用bash
shell(复制该{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 实现来强制执行。 Acp
cp -t dir file
复制到可以通过 GNU 强制cp
执行cp -T file copy-of-file