如何在 Linux 中将文件复制到多个目录
在本文中,我们将讨论如何在 Linux 中将文件复制到多个目录。 xargs,查找,三通,外壳循环, 和并行是可以帮助您将文件复制到多个目录的命令。
假设我们有一个名为“xyz.txt”的文件,我们想将其复制到 dir1、dir2 和 dir3 三个目录中,我们使用以下方法:
使用 xargs
Unix/Linux 操作系统上的xargs 命令将输入从标准输入转换为指定命令的参数列表。
句法:
xargs -n 1 cp -v xyz.txt<<<"dir1 dir2 /home/kalilinux/dir3"
OR
echo "dir1 dir2 /home/kalilinux/dir3" | xargs -n 1 cp -v xyz.txt
输出:
在第二个命令中,工作将与第一个相同,但目标文件夹和目录 (dir1,dir2,dir3) 首先回显,然后作为命令 xargs 的输入。
输出:
- -n 1:它指示 xargs 一次为每个命令行使用一个参数。
- cp:这是基本的复制命令。
- -v:在执行复制时显示信息性消息。
- xyz.txt:就是我们要复制的文件名。
- dir1 dir2是文件夹名称, /home/kalilinux/dir3是具有正确位置的目录名称,这些文件夹和目录是复制该文件的目的地。
- 使用管道运算符| ,一个命令的标准输出可以发送到另一个命令的标准输入。
注意:如果要复制的文件已存在于目标文件夹之一中,则旧文件将被替换,而不会提示用户。
必须指定目录的完整路径,否则您会收到以下消息:
您需要位于文件夹或文件所在的目录中才能直接复制到该文件夹或文件,而无需指定其完整路径或位置。如果您指定文件或文件夹的完整位置,那么无论您身在何处,都不会出现任何错误。
例子:
使用查找
在这里,命令 find启动搜索并允许根据搜索结果执行操作。
句法:
find dir1 dir2 /home/kalilinux/dir3 -maxdepth 0 -exec cp xyz.txt {} \;
在哪里,
- dir1 dir2是文件夹名称, /home/kalilinux/dir3是目录名称及其我们要执行复制操作的正确位置。
- -maxdepth :设置在执行测试和操作时find将下降到目录树中的最大级别数(就像我们在这里设置的 0)。
- -exec:用于执行用户定义的操作。除了预定义的操作之外,我们还可以在-exec命令的帮助下调用任意命令。
- cp:这是基本的复制命令。
输出:
使用 Shell 循环
在这里,我们使用bash for循环的地方复制到/ home / kalilinux / DIR2 /家庭/ kalilinux / DIR3目录,也是xyz.txt将该文件的文件夹DIR1,直接:
- 对于:它 说明文件夹和目录。
- 目标:它 用于创建将元数据对象写入文件系统的流。
- dir1:它 是文件夹
- /home/kalilinux/dir2 /home/kalilinux/dir3:这些是由我们在它们之间提供的空格分隔的目录。
- do:正在执行cp命令。
- -v:用于在执行复制时显示信息性消息。
- ' xyz.txt ':就是我们要复制到文件夹和目录中的文件名。
- done:用于结束shell脚本。
句法:
for dest in dir1 /home/kalilinux/dir2 /home/kalilinux/dir3 ; do cp -v xyz.txt “$dest” ; done
输出:
使用三通
tee 命令读取标准输入并将其复制到标准输出和一个或多个文件。
句法:
tee /home/kalilinux/dir1/xyz.txt /home/kalilinux/dir2/xyz.txt /home/kalilinux/dir3/xyz.txt< xyz.txt
如果您只想读取标准输入并将其复制到一个或多个文件中而不显示标准输出,那么您可以在上述命令的末尾使用>/dev/null 。例如:
tee /home/kalilinux/dir1/xyz.txt /home/kalilinux/dir2/xyz.txt /home/kalilinux/dir3/xyz.txt< xyz.txt >/dev/null
输出:
注意:在给出目录位置后,必须在目标末尾给出任何文件名。它可以与我们复制到目录中的文件名不同,也可以与文件名相同。
使用 GNU 并行
首先,您需要在您的个人电脑/笔记本电脑上安装它,因为它可能没有预装在您的 Linux 操作系统中。您可以使用以下命令安装它:
sudo apt install parallel
然后在我们使用之后:
parallel cp -v xyz.txt ::: /home/kalilinux/dir1 /home/kalilinux/dir2 dir3
GNU Parallel是一个用于并行执行作业的 shell 实用程序,它可以更轻松地同时针对数据集运行命令。这里我们使用:
- parallel:此关键字使用 GNU Parallel。
- cp:执行复制任务。
- -v:在执行复制时显示信息性消息。
输出: