在 Linux 中,有时您需要将文件复制到多个目录。 当我们考虑复制显而易见的命令时,经验丰富的 Linux 会将其过滤为通用的 cp 命令。 不过,这是一个问题,它不适用于将单个文件复制到多个目的地。 让我们看看
目录
cp 命令怎样失败?
将文件复制到多个目录的最基本方法是使用 cp 命令。 为了 example,如果您想将文件 /tmp/file.txt 复制到目录 /home/user1 和 /home/user2,您将使用以下命令:
cp /tmp/file.txt /home/user1 /home/user2
让我们测试一下:
执行cp命令复制到多个目录,我冒昧地使用-r命令递归复制文件。

由于 cp 命令不起作用,让我们探索其他方法来完成此任务。
使用 xargs 复制到多个目录
将文件复制到多个目录的一种方法是使用 xargs 命令。 这个命令接受一个参数列表并为每个参数执行一个命令。
为了 example,如果您想将文件 /tmp/file.txt 复制到目录 /home/user1 和 /home/user2,您将使用以下命令:
echo /home/user1 /home/user2 | xargs -n 1 cp /tmp/file.txt
xargds 的工作原理
xargs 命令用于从标准输入构建和执行命令行。 在上述命令中,xargs 命令从标准输入逐行构建并执行 cp 命令行。
-n 1 选项告诉 xargs 只使用标准输入中的一个参数。 因此,标准输入的第一行用作第一个 cp 命令的参数,标准输入的第二行用作第二个 cp 命令的参数。

默认情况下,文件不会复制,如果您使用的是 Ubuntu,则必须使用 chmod 命令更改文件夹权限。
sudo chmod -R 777 /home/

使用 find 一次将文件复制到多个目录
您还可以使用 find 命令将文件复制到多个目录。 find 命令将搜索目录中的文件,然后为每个文件执行一个命令。
为了 example,如果您想将文件 /tmp/file.txt 复制到目录 /home/user1 和 /home/user2,您将使用以下命令:
find /home/user1 /home/user2 -type d -exec cp /tmp/file.txt {} ;
find 命令怎样提供帮助
这 查找命令 用于在目录层次结构中搜索文件。 -type d 选项告诉 find 只搜索目录。 -exec cp 命令告诉 find 对其找到的每个目录执行 cp 命令。 {} 符号替换为正在处理的目录的名称。 这 ; 符号结束 -exec cp 命令。

在 shell 中使用循环将文件复制到多个目录
如果您使用的是 shell 脚本,则可以使用循环将文件复制到多个目录。 为了 example,如果您想将文件 /tmp/file.txt 复制到目录 /home/user1 和 /home/user2,您将使用以下命令:
for i in /home/dir1 /home/dir2 /home/dir3; do cp /home/file.txt $i; done
shell 脚本中的循环怎样提供帮助
for 循环遍历一个值列表,为列表中的每个值执行一次命令块。 在上述命令中,for 循环遍历 /home/dir1、/home/dir2 和 /home/dir3 目录。 对于每个目录,执行 cp 命令,将 /home/file.txt 文件复制到该目录。

使用 GNU 并行
GNU 并行 是一个可用于并行运行多个命令的工具。 这对于将文件复制到多个目录很有用。
请注意,默认情况下该命令不会安装在您的系统中。 您可以通过运行 apt 命令来安装它:
sudo apt install parallel
为了 example,如果您想将文件 /tmp/file.txt 复制到目录 /home/user1 和 /home/user2,您将使用以下命令:
parallel cp /tmp/file.txt ::: /home/user1 /home/user2
并行应用程序的工作原理
并行命令用于并行执行命令。 在上述命令中,parallel 命令为每个参数 /home/user1 和 /home/user2 并行执行 cp 命令。 因此,两个 cp 进程将并行运行,每个进程将文件 /tmp/file.txt 复制到各自的主目录。

使用三通
这 发球命令 可用于将命令的输出复制到多个文件。 这对于将文件复制到多个目录很有用。
为了 example,如果您想将文件 /tmp/file.txt 复制到目录 /home/user1 和 /home/user2,您将使用以下命令:
cp /tmp/file.txt | tee /home/user1/file.txt /home/user2/file.txt
tee 命令的工作原理
tee 命令用于从标准输入读取并写入标准输出和一个或多个文件。 在上述命令中,tee 命令从 /home/file.txt 文件读取并写入标准输出和 /home/dir1/file.txt、/home/dir2/file.txt 和 /home/dir3/ file.txt 文件。

概括
在本文中,我们向您展示了一些在 Linux 中使用 tee、parallel、running loop in shell、find 和 xargs 命令将文件复制到多个目录的最常用方法。