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

Jam*_*ama 1 linux redhat tar

我在从共享主机获取数据时遇到问题。我有大约 20 GB 的文件夹,其中包含大约 40.000 张图像。我尝试通过拆分存档文件来存档该文件夹:

tar -cvpj 'home/public_html/images/'/ | split -d -b 100m - images.tar.bz2.
Run Code Online (Sandbox Code Playgroud)

它工作正常,但问题是该过程花费的时间太长,我猜我的托管服务提供商在归档过程中终止了该过程。

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

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

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

Sco*_*ack 6

我想我实际上会使用 find 来做到这一点,然后将该输入传递到 tar.gz 中。使用您的示例,假设您需要 60 到 90 天之间的文件。

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

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

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

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