如何在 Linux 中复制文件到多个目录中
在学习 Linux 的过程中，对于新手而言总是会使用几个命令来完成一个简单的任务。对正在熟悉使用终端的人这是很容易理解的行为。然而，如果你想要成为一个老手，学习我说的“快捷命令”会显著减少时间浪费。
cp
218.88.44.158
可以只用 cp 实现。<br />
<br />
for d in {/,}; do cp --verbose --archive demo &quot;$d&quot;; done<br />
for d in {~,~/Downloads}; do cp --verbose --archive demo &quot;$d&quot;; done<br />
for d in {'dir 01','dir 02'}; do cp --verbose --archive demo &quot;$d&quot;; done<br />
<br />
for 是 bash 的一个关键字。上述例子演示了如何用 cp 一次复制一个或多个到特定目录，包含还有空格的目录。如果把 cp 改成 \cp，则直接覆盖已有文件。
来自四川成都的 Chrome 55.0|GNU/Linux 用户
2016-12-17T16:27:56.000
218.88.44.158
可以只用 cp 实现。<br />
<br />
for d in {/,}; do cp --verbose --archive demo &quot;$d&quot;; done<br />
for d in {~,~/Downloads}; do cp --verbose --archive demo &quot;$d&quot;; done<br />
for d in {'dir 01','dir 02'}; do cp --verbose --archive demo &quot;$d&quot;; done<br />
<br />
for 是 bash 的一个关键字。上述例子演示了如何用 cp 一次复制文件到一个或多个特定目录，包含还有空格的目录。如果把 cp 改成 \cp，则直接覆盖已有文件。
来自四川成都的 Chrome 55.0|GNU/Linux 用户
2016-12-17T16:31:18.000
218.88.44.158
因为第一个回复有问题，干脆改成这样。<br />
<br />
for d in {/,}; do \cp --verbose --archive {demo001,demo002} &quot;$d&quot;; done<br />
for d in {~,~/Downloads}; do \cp --verbose --archive {demo001,demo002} &quot;$d&quot;; done<br />
for d in {'dir 01','dir 02'}; do \cp --verbose --archive {demo001,demo002} &quot;$d&quot;; done<br />
<br />
上述三个例子展示了如用 cp 命令结合 bash 内部关键字 for，实现一次将一个或多个文件无须交互确认直接复制到一个或多个目录中。<br />
特别需要注意的是，用于分割文件或目录的逗号，其前后不能有空格。
来自四川成都的 Chrome 55.0|GNU/Linux 用户
2016-12-17T16:38:41.000
218.88.44.158
其实我自己日常更习惯直接使用 Tab 的自动拼写完成，将一个文件或文件名类似的多个文件，单次复制到一个目录中。用上面的命令，打字多不说，如果遇到拼写错误，复制失败倒还好，就怕复制到错误的目录，撤销起来会挺麻烦。除非用心编写一个脚本，但似乎没有这个必要。
来自四川成都的 Chrome 55.0|GNU/Linux 用户
2016-12-17T16:47:59.000
218.88.44.158
特别是意外创建了一个名字是 “~”的目录，那处理起来的小心，不然，对于用户的主目录就来不及说再见
来自四川成都的 Chrome 55.0|GNU/Linux 用户
2016-12-17T16:51:18.000
218.88.44.158
其实我自己日常更习惯直接使用 Tab 的自动拼写完成，将一个文件或文件名类似的多个文件，单次复制到一个目录中。用上面的命令，打字多不说，如果遇到拼写错误，复制失败倒还好，就怕复制到错误的目录，撤销起来会挺麻烦。除非用心编写一个脚本，但似乎没有这个必要。<br />
特别是如意外创建了一个名字就是 “~”的目录，那删除该目录得非常小心，不然，对于用户的主目录就来不及说再见
来自四川成都的 Chrome 55.0|GNU/Linux 用户
2016-12-17T16:53:22.000
在学习 Linux 的过程中，对于新手而言总是会使用几个命令来完成一个简单的任务。对正在熟悉使用终端的人这是很容易理解的行为。然而，如果你想要成为一个老手，学习我说的“快捷命令”会显著减少时间浪费。
[在学习 Linux 的过程中](http://www.tecmint.com/free-online-linux-learning-guide-for-beginners/)，对于新手而言总是会使用几个命令来完成一个简单的任务。对正在熟悉使用终端的人这是很容易理解的行为。然而，如果你想要成为一个老手，学习我说的“快捷命令”会显著减少时间浪费。


在本篇中，我们会用一个简单的方法在 Linux 中用一个命令来将目录复制到多个文件夹中。


![](/data/attachment/album/201612/17/151005k2142h0wv2vahe00.jpg)


在 Linux 中，[cp 命令](http://www.tecmint.com/advanced-copy-command-shows-progress-bar-while-copying-files/)常被用于从一个文件夹中复制文件到另一个文件夹中，最简单的语法如下：



```
# cp [options….] source(s) destination

```

另外，你也可以使用[高级复制命令](http://www.tecmint.com/advanced-copy-command-shows-progress-bar-while-copying-files/)，它可以在复制[大的文件或文件夹](http://www.tecmint.com/find-top-large-directories-and-files-sizes-in-linux/)时显示进度条。


看下下面的命令，通常你会使用两个不同的命令来将相同的文件复制到不同的文件夹中：



```
# cp -v /home/aaronkilik/bin/sys_info.sh /home/aaronkilik/test
# cp -v /home/aaronkilik/bin/sys_info.sh /home/aaronkilik/tmp

```

![Copy Files to Multiple Directories](/data/attachment/album/201612/17/151017j3gl2gjewwiez7gg.png)


*复制文件到多个文件夹中*


假设你想要复制一个特定文件到 5 个或者更多的文件夹中，这意味着你需要输入 5 次或者更多的cp命令么？


要摆脱这个问题，你可以用 cp 命令与 [echo命令](http://www.tecmint.com/echo-command-in-linux/)、管道、xargs 命令一起使用：



```
# echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

```

上面的命令中，目录的路径（dir1、dir2、dir3...dirN）被管道作为输入到 xargs 命令中，含义是：


1. `-n 1` - 告诉 xargs 命令每个命令行最多使用一个参数，并发送到 cp 命令中。
2. `cp` – 用于复制文件。
3. `-v` – 启用详细模式来显示更多复制细节。


![Copy File to Multiple Locations in Linux](/data/attachment/album/201612/17/151021auuxxnpmo9v95e5n.png)


*在 Linux 中复制文件到多个位置中*


试试阅读 `cp`、 `echo` 和 `xargs` 的 man 页面来找出所有有用和高级的用法信息：



```
$ man cp
$ man echo
$ man xargs

```

就是这样了，你可以在下面的评论区给我们发送主题相关的问题或者反馈。你也可以阅读有关 [progress 命令](http://www.tecmint.com/progress-monitor-check-progress-of-linux-commands/)来帮助监控运行中的（cp、mv、dd、[tar](http://www.tecmint.com/18-tar-command-examples-in-linux/) 等等）的进度。




---


![](/data/attachment/album/201612/17/151022hzscclmuuud7juks.jpg)


作者简介：


Aaron Kili 是一个 Linux 及 F.O.S.S 热衷者，即将成为 Linux 系统管理员、web 开发者，目前是 TecMint 的内容创作者，他喜欢用电脑工作，并坚信分享知识。




---


via: <http://www.tecmint.com/copy-file-to-multiple-directories-in-linux/>


作者：[Aaron Kili](http://www.tecmint.com/author/aaronkili/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

