Linux备份具有时间戳的已知扩展名的所有文件

时间:2017-11-07 13:35:28

标签: linux shell

我想在目录中备份具有给定扩展名的所有文件,但我希望它们带有时间戳。

给定一个目录: 示例/具有多个子目录和子文件夹名称BACKUPS。

cd Sample
find . -name '*.xml' -exec cp {} BACKUPS \;

假设我在此Sample文件夹中有多个xml文件,我希望将它们复制到BACKUPS文件夹,但我希望它们是时间戳

说..

text.xml.20171107
conf.xml.20171107

我能够备份这些文件,但我无法弄清楚如何使用find命令将时间戳附加到文件中。

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

find . -name '*.xml' -execdir cp {} "$PWD/BACKUPS/{}.$(date +%Y%m%d)" \;

和以前一样,我们使用find . -name '*.xml'来查找所有文件。但是,为了摆脱子目录的名称,我们使用-execdir而不是exec。这会导致指定的命令从当前文件所在的子目录中运行,并用其基本名称替换{}

这意味着我们必须修改cp的第二个参数(目标文件名)。我们现在传递"$PWD/BACKUPS"来创建绝对路径($PWD是当前工作目录)。这种方式cp始终以正确的目录为目标,即使从Sample的子目录调用也是如此。

最后,我们使用的文件名是从{}.$(date +%Y%m%d)构造的。 $( )运行指定的命令并替换其输出(在本例中为当前日期)。这是在调用find之前由shell完成的,因此find只能看到.../{}.20171107。在{}运行每个find之前,cp部分已由{{1}}替换。