如何在 Linux 中复制文件到多个目录中

Aaron Kili 的头像

·

·

·

56,578 次阅读

在学习 Linux 的过程中,对于新手而言总是会使用几个命令来完成一个简单的任务。对正在熟悉使用终端的人这是很容易理解的行为。然而,如果你想要成为一个老手,学习我说的“快捷命令”会显著减少时间浪费。

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

在 Linux 中,cp 命令常被用于从一个文件夹中复制文件到另一个文件夹中,最简单的语法如下:

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

另外,你也可以使用高级复制命令,它可以在复制大的文件或文件夹时显示进度条。

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

# 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

复制文件到多个文件夹中

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

要摆脱这个问题,你可以用 cp 命令与 echo命令、管道、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

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

试试阅读 cpechoxargs 的 man 页面来找出所有有用和高级的用法信息:

$ man cp
$ man echo
$ man xargs

就是这样了,你可以在下面的评论区给我们发送主题相关的问题或者反馈。你也可以阅读有关 progress 命令来帮助监控运行中的(cp、mv、dd、tar 等等)的进度。

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

作者:Aaron Kili 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

6 条回复

  1. 来自四川成都的 Chrome 55.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 55.0|GNU/Linux 用户

    可以只用 cp 实现。

    for d in {/,}; do cp –verbose –archive demo "$d"; done
    for d in {~,~/Downloads}; do cp –verbose –archive demo "$d"; done
    for d in {‘dir 01′,’dir 02’}; do cp –verbose –archive demo "$d"; done

    for 是 bash 的一个关键字。上述例子演示了如何用 cp 一次复制一个或多个到特定目录,包含还有空格的目录。如果把 cp 改成 cp,则直接覆盖已有文件。

    来自成都
  2. 来自四川成都的 Chrome 55.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 55.0|GNU/Linux 用户

    可以只用 cp 实现。

    for d in {/,}; do cp –verbose –archive demo "$d"; done
    for d in {~,~/Downloads}; do cp –verbose –archive demo "$d"; done
    for d in {‘dir 01′,’dir 02’}; do cp –verbose –archive demo "$d"; done

    for 是 bash 的一个关键字。上述例子演示了如何用 cp 一次复制文件到一个或多个特定目录,包含还有空格的目录。如果把 cp 改成 cp,则直接覆盖已有文件。

    来自成都
  3. 来自四川成都的 Chrome 55.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 55.0|GNU/Linux 用户

    因为第一个回复有问题,干脆改成这样。

    for d in {/,}; do cp –verbose –archive {demo001,demo002} "$d"; done
    for d in {~,~/Downloads}; do cp –verbose –archive {demo001,demo002} "$d"; done
    for d in {‘dir 01′,’dir 02’}; do cp –verbose –archive {demo001,demo002} "$d"; done

    上述三个例子展示了如用 cp 命令结合 bash 内部关键字 for,实现一次将一个或多个文件无须交互确认直接复制到一个或多个目录中。
    特别需要注意的是,用于分割文件或目录的逗号,其前后不能有空格。

    来自成都
  4. 来自四川成都的 Chrome 55.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 55.0|GNU/Linux 用户

    其实我自己日常更习惯直接使用 Tab 的自动拼写完成,将一个文件或文件名类似的多个文件,单次复制到一个目录中。用上面的命令,打字多不说,如果遇到拼写错误,复制失败倒还好,就怕复制到错误的目录,撤销起来会挺麻烦。除非用心编写一个脚本,但似乎没有这个必要。

    来自成都
  5. 来自四川成都的 Chrome 55.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 55.0|GNU/Linux 用户

    特别是意外创建了一个名字是 “~”的目录,那处理起来的小心,不然,对于用户的主目录就来不及说再见

    来自成都
  6. 来自四川成都的 Chrome 55.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 55.0|GNU/Linux 用户

    其实我自己日常更习惯直接使用 Tab 的自动拼写完成,将一个文件或文件名类似的多个文件,单次复制到一个目录中。用上面的命令,打字多不说,如果遇到拼写错误,复制失败倒还好,就怕复制到错误的目录,撤销起来会挺麻烦。除非用心编写一个脚本,但似乎没有这个必要。
    特别是如意外创建了一个名字就是 “~”的目录,那删除该目录得非常小心,不然,对于用户的主目录就来不及说再见

    来自成都

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注