【问题标题】:How to delete files from a .tar archive older than a certain date如何从某个日期之前的 .tar 存档中删除文件
【发布时间】:2021-08-24 21:06:44
【问题描述】:

我有一个每天都会用新文件更新的 .tar 文件。但是,超过 60 天的文件将失去价值,不再需要存档。如何从 .t​​ar 存档中删除超过 60 天的文件?

我知道有一个 --delete 选项,但我不确定如何在存档中搜索符合该条件的文件。

【问题讨论】:

  • 老实说,在 Python 中使用标准库 tarfile module 编写它可能会更容易。
  • 顺便说一句,这里要注意的重要一点是 tar 不是为随机访问而设计的存储格式(例如,zip 是)。它是为磁带驱动器设计的,所以一切都是流式传输的;没有可以为快速随机访问而更新的索引,如果您的 tar 文件被压缩,tar --delete 甚至不假装支持就地编辑。

标签: bash shell gzip tar


【解决方案1】:

最好使用构建在您需要的设施中的语言。例如,Python 有一个 tarfile 模块,下面展示了如何将 Python 脚本嵌入到用 bash 编写的更大脚本中:

#!/usr/bin/env bash

tarfilter_script=$(cat <<'EOF'
import sys
import tarfile
from datetime import datetime, timedelta

delete_older_than = (datetime.now() - timedelta(days=60)).timestamp()

with tarfile.open(fileobj=sys.stdin.buffer) as tar_in, \
     tarfile.open(fileobj=sys.stdout.buffer, mode="w") as tar_out:
    for tarinfo in tar_in:
        if tarinfo.mtime >= delete_older_than:
            tar_out.addfile(tarinfo)
        else:
            sys.stderr.write(f"Skipping file: {tarinfo}\n")
EOF
)

python3 -c "$tarfilter_script" <in.tar >out.tar

【讨论】:

    猜你喜欢
    • 2021-08-07
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2020-03-07
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    相关资源
    最近更新 更多