在这个简短的指南中,我们将讨论如何使用命令行将文件复制到多个目录 find
, cp
, echo
, xargs
和 tee
Linux 上的命令。
前几天我想将一些视频复制到我的 Arch Linux 桌面的不同文件夹中。 如您所知,我们可以通过右键单击文件,选择 Copy
选项并将其粘贴到目标目录/文件夹中。
但是,我想知道是否有任何其他方法可以一次性将文件复制到多个目录中。 我认为当我想一次将单个文件复制到多个不同目录时会有所帮助。 我做了一些网络搜索,并提出了以下解决方案。
重要警告:
请注意,以下命令不会要求任何确认。 如果目标目录中存在同名文件,则会自动替换。
如果您是 Linux 新手,我建议您在开始在生产中使用它们之前在任何测试机器上测试这些命令。 这样您就可以防止不必要的数据丢失。
内容
在 Linux 上从命令行将文件复制到多个目录
我有一个名为的文本文件 ostechnix.txt
在我的主目录中,我想将它复制到两个不同的目录中,称为 Downloads
和 Documents
一气呵成。
首先,让我们看看如何使用 find
和 cp
命令。
方法一:使用 find 和 cp 命令
我们可以使用一次将单个文件复制到多个目录 find
和 cp
命令。
这 find
是 Unix 和 Linux 命令,用于在目录层次结构中搜索文件,cp 命令用于复制文件和目录。
复制名为的文件 ostechnix.txt
到 ~/Downloads
和 ~/Documents
目录使用 find
和 cp
命令,运行:
$ find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp ostechnix.txt {} ;
以上命令将当前目录下的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 {} ;
现在,如果目标文件已经存在于目标位置,它不会替换目标文件。
方法二:使用echo、xargs和cp命令
将文件复制到多个位置的另一种方法是使用 echo
, xargs
和 cp
命令。
众所周知, cp
命令用于复制文件和目录,以及 xargs
command 用于从标准输入构建和执行命令行。
使用以下命令将文件复制到多个目录 echo
, xargs
和 cp
命令,运行:
$ echo ~/Downloads ~/Documents | xargs -n 1 cp ostechnix.txt
让我们分解上面的命令,看看它是如何工作的。
一般来说, 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

我再次警告你。 如果已经存在任何具有相同名称的文件(即 ostechnix.txt
) 在目标中,上述命令将覆盖现有文件。
详情请查看上述命令的手册页:
$ man cp
$ man find
$ man xargs
$ man echo
$ man tee
结论
这就是我们在 Linux 中从命令行一次将文件复制到多个目录的方式。 可能还有其他方法,但我相信这些命令非常简单且易于使用。
再次确保目标路径正确,最重要的是确保目标位置中不存在同名文件。
相关阅读:
- 如何在 Linux 中查找特定类型的文件并将其从一个目录复制到另一个目录
- 在 Linux 中保留目录结构的同时复制特定文件类型
- 同时复制文件和创建目标目录
- 如何复制文件并同时更改所有权、权限
- 复制文件或目录时如何保持所有权和文件权限不变
- 使用 Rsync 通过 SSH 恢复部分传输的文件
- 如何在 Linux 和 Unix 中通过网络快速传输大文件
- 高级复制 – 在 Linux 中为 cp 和 mv 命令添加进度条
- 将文件内容复制到剪贴板而不显示它们
BASHcopy filescp 命令find 命令LinuxLinux 基础Linux 命令Linux howtoUnix