我只想解压在 2024-02-19 01:00:00 和 2024-02-19 02:00:00 之间从一个巨大的 tarball 创建的文件。
我不知道应该如何组合 tar 和 find 命令,因为我无法在 tar 中运行 find。
谢谢你的帮助,安德鲁
from schilytoolsstar的实现有一个嵌入的,与 shell 中的或内置的相同,两者也在 schilytools 中,尽管在 中,当在 e 牵引模式下使用时,谓词可以应用于存档成员的属性而不是文件系统上的文件。tarfindsfindfindboshstarx
这find也支持-newerXYBSD 的谓词。
所以:
star xf file.tar -find -newermt 2024-02-19T00:59:59 ! -newermt 2024-02-19T02:00:00
Run Code Online (Sandbox Code Playgroud)
将提取记录的修改时间在该范围内的存档成员。
对于 GNU 工具(包括 GNU tar,有时称为gtar,但通常tar在 GNU 系统上),一种方法可能是使用其--to-command将存档成员通过管道传输到某个命令,其中成员的修改时间在环境变量中可用TAR_MTIME:
START=$(date -d 2024-02-19T01:00:00 +%s) \
END=$(date -d 2024-02-19T02:00:00 +%s) \
tar -xf file.tar --to-command='
if
[ "$TAR_MTIME" -ge "$START" ] &&
[ "$TAR_MTIME" -le "$END" ]
then
mkdir -p -- "$(dirname -- "$TAR_FILENAME")" &&
cat > "$TAR_FILENAME" &&
touch -d "@$TAR_MTIME" -- "$TAR_FILENAME"
fi'
Run Code Online (Sandbox Code Playgroud)
请注意,它仅提取常规文件(如果存档中存在多个指向同一文件的硬链接,则为第一次出现),不保留除 mtime 之外的任何元数据touch。