我有一个包含多个文件和目录的目录。如何将目录及其所有内容复制到多个不同的目录?即相同的内容需要复制到多个目录中。
答案1
cp
单独不可能
cp
仅复制到一目的地。
从男人cp
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
因此,您需要运行该命令两次,每个目的地运行一次。
其他方法
但是,可以通过使用其他命令与 结合使用cp
。
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
支持在(取消)去皮之前进入目录的选项的实现-C
)cd
,您还可以执行以下操作:
tar -C $srcdir -cf - . > >(tar -C dir1 -xpf -) \
> >(tar -C dir2 -xpf -) \
> >(tar -C dir3 -xpf -)
只读取一次内容$srcdir
并且球座通过三个同时运行的命令进行提取tar
。