作为命令行新手,您可能会觉得与您以前通过图形界面执行的相同任务可能会在命令行中要求很多命令。但是,随着您通过学习,实践和经验逐渐成为命令行的高级用户,您将开始注意到可以通过一些非常简单但有用的快捷方式非常快地执行相同的任务。在本文中,我们将描述一种情况,显然可能需要运行许多命令,但实际上,一个简单的命令可以为您完成任务。
有时,我们需要将单个文件复制到系统上的多个位置。这是否意味着我们需要多次使用cp命令?答案是不!让我们进一步阅读以找到解决方案。
本文提到的命令已在Ubuntu 18.04 LTS系统上运行。
如何将一个文件同时复制到多个位置
我们都知道cp命令如何使我们通过以下语法将文件复制到新位置:
$ cp ~[/location/sourcefile] ~[/destinationfolder]
在这里,我将示例文本文件从“下载”文件夹复制到“文档”文件夹:
现在,如果我想将同一文件复制到两个不同的位置而不是一个位置,则可能的解决方案似乎使用了cp命令两次。
在这里,我两次使用cp命令将示例文本文件从Downloads文件夹复制到Public和Desktop文件夹:
通过使用cp命令两次将同一文件复制到两个位置似乎仍然合乎逻辑,但是让我们假设我们必须将文件复制到三个,五个甚至更多个位置。这是单个命令可以实现此目的的方式。
句法:
$ echo [destination1] [desctination2] [destiantion3]..... | xargs -n 1 cp [/location/sourcefile]
在以下示例中,我将使用此命令将示例文本文件从“下载”文件夹同时复制到三个不同的文件夹:
我们已经在一行中使用了echo命令和xargs命令来达到目的。
该命令如何工作?
echo命令将输出打印到屏幕上,但在我们的示例中,我们使用它通过|将输出馈送到xargs命令。符号。 xargs命令将从echo命令获得三次输入,并执行三次cp操作,将示例文本复制到三个不同的位置。 n计数告诉cp命令一次接受一个参数。
请注意,此命令将覆盖目标文件夹中相同名称的现有文件。因此,最好始终备份重要文件。我们用于覆盖操作之前询问的i选项不适用于xargs命令。
但是,该命令有一种用法,可以帮助您避免覆盖目标文件夹中已经存在的文件;源文件之前的n选项。
句法:
$ echo [destination1] [desctination2] [destiantion3]..... | xargs -n 1 cp n [/lcoation/sourcefile]
例:
当您将非常大的文件从一个位置复制到另一位置(尤其是通过网络)时,n选项非常有用。这样,您可以避免在复制然后替换现有文件时浪费资源。
在运行完本教程之后,您已成为成为命令行专家的第一步。现在,您无需编写多个命令即可执行将一个文件复制到不同位置的简单任务。您可以按照我们的描述合并echo和xargs命令,以获取针对您问题的one-command解决方案。