当前位置:首页>弱电技术>系统运维>在Linux中如何将文件复制到多个位置?

在Linux中如何将文件复制到多个位置?

在Linux中如何将文件复制到多个位置?

使用一系列命令将文件复制到多个位置或将多个文件复制到单个位置可能很耗时,但有一些选项可以加快该过程。这篇文章解释了其中的一些。

像这样的多个命令可以将单个文件复制到系统上的一系列目录中:

$ 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免费入群,记得备注“弱电智能网”。

给TA打赏
共{{data.count}}人
人已打赏
系统运维

在 Linux 上列出和排序文件的 11 种方法

2022-10-18 14:57:07

系统运维

什么是服务器以及服务器做什么?

2022-10-18 15:21:34

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
购物车
优惠劵
搜索