Alexander Zeitler Asked: 2019-11-03 12:40:06 +0800 CST2019-11-03 12:40:06 +0800 CST 2019-11-03 12:40:06 +0800 CST 使用大括号扩展将文件复制到多个文件夹 772 我正在尝试使用大括号扩展将文件从文件夹复制到多个文件夹中,如下所示: cp source_folder/source.json target_folder{1..11} 但我收到此错误(对于每个target_folder名称: cp: target_folder1 is a directory (not copied). 我究竟做错了什么? bash cp 2 个回答 Voted Best Answer dirkt 2019-11-03T13:06:48+08:002019-11-03T13:06:48+08:00 的语法cp类似于 cp src1 src2 src3 ... srcn destdir 表示target_folder{1..11}展开时,前 10 项将被视为源名称,只有最后一项作为目录。由于第一个被视为源名称的目录是目录,因此您会收到引用的错误消息。 或者换句话说:您不能使用cp在单个命令中复制到多个目录,不能使用大括号扩展,也不能使用其他方式。 改用循环(未经测试): for d in target_folder{1..11} ; do cp source_folder/source.json "$d" ; done Kamil Maciorowski 2019-11-03T13:10:09+08:002019-11-03T13:10:09+08:00 我究竟做错了什么? 大括号扩展生成多个参数。cp看不到您键入的内容,它会在扩展您键入的内容后看到 shell 提供的内容。cp不支持多个目标,但它支持多个源。在您的(扩展的)命令中,只有最后一个参数被解释为目标。大括号扩展产生的除一个参数外的所有参数都被认为是额外的来源。 target_folder1 is a directory (not copied)手段被解释为源,但它没有被复制,因为除非您使用或等效选项target_folder1,否则无法复制目录。-R 要复制到多个目的地,您可以从这个答案调整解决方案。在您的情况下,有一个文件要复制,所以它会像: <source_folder/source.json tee target_folder{1..11}/source.json >/dev/null Notetee只读取一次源文件。cp最明显的解决方案是遍历目的地并为每个目的地调用一个单独的进程cp。不过,这会多次读取文件。在您的情况下,这可能无关紧要,但如果文件很大,那么您肯定不想阅读它十一次。
的语法
cp
类似于表示
target_folder{1..11}
展开时,前 10 项将被视为源名称,只有最后一项作为目录。由于第一个被视为源名称的目录是目录,因此您会收到引用的错误消息。或者换句话说:您不能使用
cp
在单个命令中复制到多个目录,不能使用大括号扩展,也不能使用其他方式。改用循环(未经测试):
大括号扩展生成多个参数。
cp
看不到您键入的内容,它会在扩展您键入的内容后看到 shell 提供的内容。cp
不支持多个目标,但它支持多个源。在您的(扩展的)命令中,只有最后一个参数被解释为目标。大括号扩展产生的除一个参数外的所有参数都被认为是额外的来源。target_folder1 is a directory (not copied)
手段被解释为源,但它没有被复制,因为除非您使用或等效选项target_folder1
,否则无法复制目录。-R
要复制到多个目的地,您可以从这个答案调整解决方案。在您的情况下,有一个文件要复制,所以它会像:
Note
tee
只读取一次源文件。cp
最明显的解决方案是遍历目的地并为每个目的地调用一个单独的进程cp
。不过,这会多次读取文件。在您的情况下,这可能无关紧要,但如果文件很大,那么您肯定不想阅读它十一次。