2024-02-19 01:00:00と2024-02-19 02:00:00の間に巨大なtarballで生成されたファイルを解凍したいと思います。
tarではfindを実行できないので、tarとfindコマンドをどのように組み合わせるのかわかりません。
助けてくれてありがとう、アンドリュー
ベストアンサー1
でstar
実装tar
ヒリーツールシェルにあるものと同じ組み込みのものがあるか、find
どちらもschilytoolsにありますが、schilytoolsでは、プルモードで使用すると、述部がアーカイブメンバーの属性に適用される可能性があります。ファイルシステムのファイルよりsfind
find
bosh
star
x
これはBSD述語もfind
サポートします-newerXY
。
だから:
star xf file.tar -find -newermt 2024-02-19T00:59:59 ! -newermt 2024-02-19T02:00:00
この範囲内で、履歴変更時間を持つアーカイブメンバーが抽出されます。
GNUツール(tar
時々呼び出されますが、gtar
通常tar
GNUシステムではGNUを含む)の場合、1つのアプローチはそれを使用して--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'
通常のファイルのみを抽出し(アーカイブに同じファイルへの複数のハードリンクがある場合は最初に発生します)、mtime以外のメタデータは保存しませんtouch
。