gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:14:19 24 4
gpt4 key购买 nike

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

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

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

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

说..

text.xml.20171107
conf.xml.20171107

我能够备份文件,但我不知道如何使用 find 命令将时间戳附加到文件。

最佳答案

你可以试试这个:

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

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

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

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

关于Linux 备份所有带有时间戳的已知扩展名的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47159327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com