如何将一个目录复制到多个目标目录?

如何将一个目录复制到多个目标目录?

我有一个包含多个文件和目录的目录。如何将目录及其所有内容复制到多个不同的目录?即相同的内容需要复制到多个目录中。

答案1

cp单独不可能

cp仅复制到目的地。

男人cp

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

因此,您需要运行该命令两次,每个目的地运行一次。

其他方法

但是,可以通过使用其他命令与 结合使用cp

Linux下如何将一个文件复制到多个目录

xargs

echo directory_1 directory_2 | xargs -n 1 cp file_1

对于目录,添加-r

echo directory_1 directory_2 | xargs -n 1 cp -r source_directory

find

find directory1 directory2 -exec cp file.txt {} \;

对于目录,添加-r

find directory1 directory2 -exec cp -r source_directory {} \;

在 shell 中循环

for dir in *; do [ -d “$dir” ] && cp /full_path/file.txt “$dir” ; done

对于目录,添加-r

for dir in *; do [ -d “$dir” ] && cp -r /full_path_to/source_directory “$dir” ; done

parallel

parallel cp -v /etc/resolv.conf ::: /directory1/, /directory2/

对于目录,添加-r

parallel cp -r source_directory ::: /directory1/, /directory2/

使用tee代替cp

来自同一链接

tee ~/directory1/file1 ~/directory2/file1 < ~/file1

或者

tee ~/directory1/file1 ~/directory2/file1 < ~/file1 >/dev/nul

答案2

我所知道的所有工具都只能有一个目的地,您只需运行cp(或例如rsync)两次:

cp -r dir target1
cp -r dir target2

答案3

如果 dst 目录列表位于数组变量中,您可能需要使用循环for

srcdir=src/dir
dstdirs=( some/dir some/other/dir dir3 dir4 )
for dir in "${dstdirs[@]}"; cp -a -- "$srcdir" "$dir/"; done

(在上面的 zsh/bash/ksh93/mksh 语法中,使用复制所有内容-a的 GNU 选项)。cp

您可能需要考虑如果任何命令cp失败该怎么办:中止循环,在总体退出状态中报告它......

要仅复制内容而不复制其dir本身,请替换"$srcdir""$srcdir/."

使用zsh(以及tar支持在(取消)去皮之前进入目录的选项的实现-Ccd,您还可以执行以下操作:

tar -C $srcdir -cf - . > >(tar -C dir1 -xpf -) \
                       > >(tar -C dir2 -xpf -) \
                       > >(tar -C dir3 -xpf -)

只读取一次内容$srcdir并且球座通过三个同时运行的命令进行提取tar

相关内容