我想在目录中备份具有给定扩展名的所有文件,但我希望它们带有时间戳。
给定一个目录: 示例/具有多个子目录和子文件夹名称BACKUPS。
cd Sample
find . -name '*.xml' -exec cp {} BACKUPS \;
假设我在此Sample文件夹中有多个xml文件,我希望将它们复制到BACKUPS文件夹,但我希望它们是时间戳
说..
text.xml.20171107
conf.xml.20171107
我能够备份这些文件,但我无法弄清楚如何使用find命令将时间戳附加到文件中。
答案 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}}替换。