从特定日期范围内的文件创建 tar

从特定日期范围内的文件创建 tar

我无法从共享主机获取数据。我有一个大约 20 GB 的文件夹,其中包含大约 40,000 张图片。我尝试通过拆分存档文件来存档该文件夹:

tar -cvpj 'home/public_html/images/'/ | split -d -b 100m - images.tar.bz2.

它运行正常,但问题是这个过程花费的时间太长,我猜我的托管服务提供商在存档过程中终止了这个过程。

所以我无法使用存档文件,因为当我尝试提取它时,它会给出损坏的消息,当我再次运行此命令时,它会尝试再次存档所有文件并覆盖以前存档的文件。

现在我决定按日期存档,例如每个存档仅包含在一个月内上传的文件。不幸的是,我尝试了几个命令,但我找不到方法。

我发现了这个问题:如何根据特定文件名仅对目录中的文件进行 tar 操作?但我需要特定的日期范围。
我如何根据日期模式存档/压缩和过滤文件?或者有没有其他方法可以从那里获取我的文件我尝试使用 cPanel,但它跳过了该文件夹。

答案1

我认为我实际上应该使用 find 来执行此操作,然后将该输入传递给 tar。使用您的示例,我们假设您想要 60 到 90 天的文件。

查找 /home/public_html/images -type f -daystart -mtime -90 -and -mtime +60 -print0 | xargs -0 tar -Ajf images_60-90.tar.bz2

这将列出最后修改时间超过 60 天且少于 90 天的所有文件,并将它们放在名为 的 tarball 中images_60-90.tar.bz2。我使用-print0xargs主要是为了保护自己免受名称中带有空格的文件的影响,并且以防文件太多而超出命令行最大长度(可以通过运行命令找到getconf ARG_MAX)。我还没有测试过该命令,我不知道如果在文件不存在的情况下使用附加选项会发生什么,所以你可能需要做更多的调整。

但是,如果你知道任何文件名中都没有空格,并且文件数量将少于 ARG_MAX 的值,您可以稍微简化一下命令。

查找 /home/public_html/images -type f -daystart -mtime -90 -and -mtime +60 tar -cjf images_60-90.tar.bz2

相关内容