巨大なタールボールからファイルを抽出しますが、2つのタイムスタンプの間でのみ生成されます。

巨大なタールボールからファイルを抽出しますが、2つのタイムスタンプの間でのみ生成されます。

2024-02-19 01:00:00と2024-02-19 02:00:00の間に巨大なtarballで生成されたファイルを解凍したいと思います。

tarではfindを実行できないので、tarとfindコマンドをどのように組み合わせるのかわかりません。

助けてくれてありがとう、アンドリュー

ベストアンサー1

star実装tarヒリーツールシェルにあるものと同じ組み込みのものがあるか、findどちらもschilytoolsにありますが、schilytoolsでは、プルモードで使用すると、述部がアーカイブメンバーの属性に適用される可能性があります。ファイルシステムのファイルよりsfindfindboshstarx

これはBSD述語もfindサポートします-newerXY

だから:

star xf file.tar -find -newermt 2024-02-19T00:59:59 ! -newermt 2024-02-19T02:00:00

この範囲内で、履歴変更時間を持つアーカイブメンバーが抽出されます。

GNUツール(tar時々呼び出されますが、gtar通常tarGNUシステムでは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

おすすめ記事