在 Linux 上从命令行将文件复制到多个目录

在这个简短的指南中,我们将讨论如何使用命令行将文件复制到多个目录 find, cp, echo, xargstee Linux 上的命令。

前几天我想将一些视频复制到我 Arch Linux 桌面的不同文件夹中。 如您所知,我们可以通过右键单击文件轻松完成,选择 Copy 上下文菜单中的选项并将其粘贴到目标目录/文件夹中。

但是,我想知道是否有任何其他方法可以一次将文件复制到多个目录中。 我认为当我想一次将单个文件复制到多个不同目录时会有所帮助。 我进行了一些网络搜索并提出了以下解决方案。

重要警告:

请注意,以下命令不会要求任何确认。 如果目标目录下存在同名文件,则会自动替换。

如果您是 Linux 新手,我建议您先在任何测试机器上测试这些命令,然后再开始在生产中使用它们。 这样可以防止不必要的数据丢失。

在 Linux 上从命令行将文件复制到多个目录

我有一个名为的文本文件 ostechnix.txt 在我的主目录中,我想将它复制到两个不同的目录 DownloadsDocuments 一气呵成。

首先,让我们看看如何将文件复制到多个不同的目录中 findcp 命令。

方法一:使用 find 和 cp 命令

我们可以使用一次将单个文件复制到多个目录 findcp 命令。

find 是用于在目录层次结构中搜索文件的 Unix 和 Linux 命令,而 cp 命令用于复制文件和目录。

复制一个名为 ostechnix.txt~/Downloads~/Documents 目录使用 findcp 命令,运行:

$ find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp ostechnix.txt {} ;
在 Linux 中使用 find 和 cp 命令将文件复制到多个不同的目录

上述命令会将当前目录下的 ostechnix.txt 文件复制到 ~/Downloads~/Documents 目录。

如果您不指定 '-maxdepth 0' 选项, ostechnix.txt 文件将被复制到 ~/Downloads, ~/Documents 目录以及它们的子目录。 所以,不要忘记指定它。

正如我之前警告过的,如果已经存在任何具有相同名称的文件(即 ostechnix.txt) 在任何目标目录中,上述命令将简单地覆盖现有文件而无需任何确认。

如果您不想覆盖现有文件,可以使用 -n 标志与 cp 命令如下:

$ find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp -n ostechnix.txt {} ;

现在,如果目标文件已经存在,它将不会替换目标文件。

方法 2:使用 echo、xargs 和 cp 命令

将文件复制到多个位置的另一种方法是使用 echo, xargscp 命令。

如您所知, cp 命令用于复制文件和目录,并且 xargs command 用于从标准输入构建和执行命令行。

将文件复制到多个目录使用 echo, xargscp 命令,运行:

$ echo ~/Downloads ~/Documents | xargs -n 1 cp ostechnix.txt
在 Linux 中使用 cp、echo 和 xargs 命令将文件复制到多个目录

让我们分解上面的命令,看看它是如何工作的。

一般来说, echo 命令将给定的字符串或文本打印到标准输出。 但在这种情况下,我们通过管道输出 echo 命令 xargs. 这里, echo 命令将目录路径发送到 xargs 作为输入。

xargs 命令运行 cp 命令两次并将每个目录的路径附加到末尾 cp 命令。

xargs 命令从以下位置接收两个参数(即目录路径) echo 命令。 这 -n 1 上的选项 xargs 命令告诉 xargs 一次只附加其中一个参数。

同样,上面的命令替换它已经存在的目标文件。 如果您不想替换目标文件,请添加 -n 命令中的标志:

$ echo ~/Downloads ~/Documents | xargs -n 1 cp -n ostechnix.txt

方法 3 – 使用 tee 命令

Tee 是一个 Unix 和 Linux 实用程序,用于从标准输入读取并写入标准输出和文件。

现在,让我们复制 ostechnix.txt 文件放入两个不同的目录,称为 /home/sk/Downloads/home/sk/Documents.

为此,只需从终端运行以下命令:

$ tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt

上面的命令将复制 ostechnix.txt 文件从主目录到 ~/Downloads~/Documents 目录。

请注意 tee 命令还将输入写入标准输出。 如果你不想 tee 命令执行此操作,只需将标准输出重定向到 /dev/null 如下所示。

$ tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt >/dev/null
在 Linux 中使用 tee 命令将文件复制到多个不同的目录在 Linux 中使用 tee 命令将文件复制到多个不同的目录

我再次警告你。 如果已经存在任何同名文件(即 ostechnix.txt) 在目的地中,上述命令将覆盖现有文件。

有关详细信息,请查看上述命令的手册页:

$ man cp
$ man find
$ man xargs
$ man echo
$ man tee

结论

这就是我们在 Linux 中从命令行一次将文件复制到多个目录的方式。 可能还有其他方法,但我相信这些命令非常简单易用。

同样,确保目标路径正确,最重要的是确保目标位置中不存在同名文件。

相关阅读:

  • 如何在 Linux 中查找并将某些类型的文件从一个目录复制到另一个目录
  • 在 Linux 中保留目录结构的同时复制特定文件类型
  • 同时复制文件和创建目标目录
  • 如何复制文件并同时更改所有权、权限
  • 复制文件或目录时如何保持所有权和文件权限完整
  • 使用 Rsync 通过 SSH 恢复部分传输的文件
  • 如何在 Linux 和 Unix 中通过网络快速传输大文件
  • 高级复制 – 在 Linux 中为 cp 和 mv 命令添加进度条
  • 将文件内容复制到剪贴板而不显示它们