Linux下如何用一条命令将一个文件复制到多个目录

使用Linux命令行复制文件很容易。但是,如果要将同一文件复制到几个不同的位置,该怎么办呢?这也很简单,我们将向您展示如何使用一个命令来实现这一点。

通常,要复制一个文件,可以使用cp命令,链接到源文件和目标目录:

cp ~/Documents/FileToBeCopied.txt ~/TextFiles/

要将其复制到另外两个目录,许多人只需在不同的目标位置多运行该命令两次:

cp ~/Documents/FileToBeCopied.txt ~/Dropbox/cp ~/Documents/FileToBeCopied.txt /media/lori/MYUSBDRIVE/

但是,我们可以使用一条命令完成相同的任务:

echo dir1 dir2 dir3 | xargs -n 1 cp file1

下面是该命令的工作方式。ECHO命令通常写入屏幕。但是,在本例中,我们希望将echo命令的输出作为输入提供给xargs命令。为此,我们使用管道符号(|)将一个命令的输出作为输入输入到另一个命令。xargs命令将运行cp命令三次,每次都将通过管道传递给它的下一个目录路径附加到cp命令的末尾。有三个参数被传递给xargs,但是xargs命令上的-n1选项告诉它每次只将其中一个参数附加到cp命令。

因此,继续使用前面的示例,可以将上面的三个单独的cp命令合并为一个命令,如下所示:

echo ~/TextFiles/ ~/Dropbox /media/lori/MYUSBDRIVE | xargs -n 1 cp ~/Documents/FileToBeCopied.txt

请注意,如果要复制的文件存在于任何指定的目标目录中,则该目标目录中的文件将被自动替换。系统不会询问您是否要替换该文件。(通常,当您使用cp命令将文件复制到单个位置时,可以添加-i选项来询问是否要替换现有文件。但是,-i选项是交互式选项(它导致cp命令要求用户输入),当cp命令与xargs结合使用时,您不能将交互式选项与cp命令一起使用。)

另一件需要考虑的事情是,如果您要复制一个非常大的文件,您可能希望在上面的单个命令中的cp命令中添加no-clobber(-n)选项。如果目标中已存在文件,则此选项会自动防止该文件在目标中被覆盖。如果要通过网络复制非常大的文件,可能会很慢,并且您可能希望避免使用复制和替换该文件所需的资源。以下命令添加-n选项,如果该文件已存在于该目标中,则不会将该文件复制到ECHO语句的参数中列出的任何目标。

echo ~/TextFiles/ ~/Dropbox /media/lori/MYUSBDRIVE | xargs -n 1 cp -n ~/Documents/FileToBeCopied.txt

在Linux的命令行中键入man echo、man xargs或mancp可以获得有关这些命令的更多信息。

相关文章