如何从 .tar 存档中删除早于特定日期的文件
How to delete files from a .tar archive older than a certain date
我有一个 .tar 文件,每天都会更新新文件。但是,文件超过 60 天后,它就毫无价值,不再需要在存档中。我如何从 .tar 存档中删除超过 60 天的文件?
我知道有一个 --delete
选项,但我不确定如何在存档中搜索符合该条件的文件。
最好使用一种构建在您需要的设施中的语言。例如,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
我有一个 .tar 文件,每天都会更新新文件。但是,文件超过 60 天后,它就毫无价值,不再需要在存档中。我如何从 .tar 存档中删除超过 60 天的文件?
我知道有一个 --delete
选项,但我不确定如何在存档中搜索符合该条件的文件。
最好使用一种构建在您需要的设施中的语言。例如,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