使用一系列命令将文件复制到多个位置或将多个文件复制到单个位置可能很耗时,但有一些选项可以加快该过程。这篇文章解释了其中的一些。
像这样的多个命令可以将单个文件复制到系统上的一系列目录中:
$ cp myfile dir1 $ cp myfile dir2 $ cp myfile dir3
使任务更容易的一种方法是键入第一个命令,然后通过仅指定所需的更改来重复该命令。此方法依赖于文件或目录名称是否足够相似以仅替换部分名称。
# single file to multiple dirs # multiple files to single dir $ cp myfile dir1 $ cp myfile1 dir $ ^1^2^ $ ^1^2^ cp myfile dir2 cp myfile2 dir $ ^2^3^ $ ^2^3^ cp myfile dir3 cp myfile3 dir
另一种选择是使用xargs命令将文件复制到多个目录:
$ echo dir1 dir2 dir3 | xargs -n 1 cp -v myfile
‘myfile’ -> ‘dir1/myfile’
‘myfile’ -> ‘dir2/myfile’
‘myfile’ -> ‘dir3/myfile’
在这种情况下,xargs命令使用您提供的信息(目录名称)来组成将文件复制到三个目录所需的三个命令中的每一个。-v参数确保您将看到正在复制的文件列表。-n确保每个命令将仅使用echo命令在xargs运行的每个命令中提供的参数之一。作为比较,如果你运行这样的命令,你会看到每行三个参数:
$ echo Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec | xargs -n 3 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
使用xargs运行多个命令的一个限制是,您使用echo发送给命令的参数将始终附加到正在运行的命令的末尾,因此您不能使用相同的技术将三个文件复制到一个目录。cp命令要求最终字符串是目标目录,并且无法让xargs重新排列命令。显然,像下面的命令这样的东西是行不通的。
$ echo file1 file2 file3 | xargs -n 2 cp dir1 cp: target 'file2' is not a directory cp: -r not specified; omitting directory 'dir1'
如果您尝试如下命令,您也会遇到问题。只有列表中的最后一个目录会获得该文件的副本。
$ cp xyz dir1 dir2 dir3 cp: -r not specified; omitting directory 'dir1' cp: -r not specified; omitting directory 'dir2'
另一种选择是使用其中一个for命令来循环文件:
$ for file in file1 file2 file3 $ for file in `ls file?` > do > do > cp -v $file dir1 > cp -v $file dir1 > done > done 'file1' -> 'dir1/file1' 'file1' -> 'dir1/file1' 'file2' -> 'dir1/file2' 'file2' -> 'dir1/file2' 'file3' -> 'dir1/file3' 'file3' -> 'dir1/file3'
同样,-v用于显示cp命令的活动,以便您可以轻松地看到该命令正在执行您期望的操作。
您还可以使用类似于上面看到的命令将多个文件复制到当前目录或另一个目录中。
$ for file in myfile1 myfile2 myfile3 > do > cp -v $file backups > done 'myfile1' -> 'backups/myfile1' 'myfile2' -> 'backups/myfile2' 'myfile3' -> 'backups/myfile3'
如果您经常更新重要文件并希望将文件保存到备份文件夹中,您可能应该将此命令转换为脚本,这样您输入错误命令的可能性就会更低,并且肯定会使过程变得更简单。
#!/bin/bash for file in myfile1 myfile2 myfile3 do cp -v $file backups done
像下面这样的脚本会将您列出的任何文件作为参数并将它们复制到您的备份文件夹中。但是,文件名不能包含空格,因为每个字符串都被视为单独的文件名。
#!/bin/bash if [ $# != 0 ] # if file names provided then for file in $* do cp -v $file backups done fi
通过cron运行脚本将允许您自动备份更新的文件。要检查您的系统上是否安装了crontab,请尝试以下命令:
$ which crontab $ crontab -l bash: crontab: command not found...
此命令将检查Fedora 上是否安装了cron :
$ rpm -q cronie package cronie is not installed
Cronie 是提供cron和相关服务的软件包。要在 Fedora 上安装它,我们使用如下命令:
$ sudo dnf install cronie
之后,您可以像这样检查crontab命令:
$ which crontab /usr/bin/crontab
如果您还没有建立crontab文件,当您尝试查看它时会看到:
$ crontab -l No crontab for username
如果这样做,您将看到类似这样的内容,显示已设置的命令以及何时运行它们。
$ crontab -l 0 0 23 * * /usr/bin/cp /home/username/bin/cpfiles
在上面的示例中,cpfiles脚本将在每天晚上 11 点运行,前提是 crontab 守护程序 ( crond ) 正在运行。
总结
当然有很多方法可以复制一系列文件,而不必分别键入每个cp命令或文件名。使用xargs命令、循环和脚本可以为您节省大量时间和麻烦。
本文由 @弱电KK 发布于弱电智能网 。
题图来自Unsplash,基于CC0协议
内容观点仅代表作者本人,弱电智能网平台仅提供信息存储空间服务。
如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
文章名称:《在Linux中如何将文件复制到多个位置?》
文章链接:https://www.ruodian360.com/tech/sytemops/34810.html
添加微信ydian188免费入群,记得备注“弱电智能网”。