在 Linux 上使用单个命令将文件复制到多个目录

在 Linux 中,有时您需要将文件复制到多个目录。 当我们考虑复制显而易见的命令时,经验丰富的 Linux 会将其过滤为通用的 cp 命令。 不过,这是一个问题,它不适用于将单个文件复制到多个目的地。 让我们看看

目录

cp 命令如何失败?

将文件复制到多个目录的最基本方法是使用 cp 命令。 为了 example,如果您想将文件 /tmp/file.txt 复制到目录 /home/user1 和 /home/user2,您将使用以下命令:

cp /tmp/file.txt /home/user1 /home/user2

让我们测试一下:

显示 3 个目录和一个文件的 GUI 和终端的屏幕截图已创建用于测试 cp 命令。

执行cp命令复制到多个目录,我冒昧地使用-r命令递归复制文件。

将文件复制到多个目录的 cp 命令的屏幕截图
截图 2022 年 9 月 28 日下午 12.30.25好吧,’cp’ 命令毕竟没有发挥它的魔力,你知道吗!

由于 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 命令的参数。

截图 2022 09 28 在 12.44.41 PM执行 xargs 命令

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

sudo chmod -R 777 /home/
截图 2022 09 28 在 12.49.04 PM使用 xargs 命令将文件成功复制到多个目录

使用 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 命令。

截图 2022 09 28 在 12.58.26 PM使用 find 命令成功将文件复制到多个目录

在 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 文件复制到该目录。

截图 2022 09 28 在 1.04.11 PM通过在 shell 中使用循环成功将文件复制到多个目录

使用 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 复制到各自的主目录。

截图 2022 09 28 在 1.10.05 PM使用 GNU 并行将文件成功复制到多个目录

使用三通

发球命令 可用于将命令的输出复制到多个文件。 这对于将文件复制到多个目录很有用。

为了 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 文件。

截图 2022 09 28 在 1.21.39 PM使用 tee 命令成功将文件复制到多个目录

概括

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