tarは「日付を…に…」というメッセージを表示しません。

tarは「日付を…に…」というメッセージを表示しません。

私のスクリプトでは、次のようにファイルをパッケージ化しようとしていますtest

if tar czfv "/tmp/tmp.tar.gz" --mtime="$(date +'%Y-%m-%d %H:00')" "test" --utc;then

私は出力を得る

tar: Option --mtime: Treating date „2022-10-24 00:00“ as 2022-10-23 22:00:00

この出力をどのように抑制できますか?

ベストアンサー1

ソースコードからわかるように、tarGNUは日付形式を再指定するたびに警告します。そしてtartime()(例:YYYY-MM-DD HH:MM:SS1)ユーザー入力(そしてparse_datetime())は提供されたタイムスタンプとバイト単位で同じではなく、verboseがオンの場合にのみ適用されます。

--utcここでは、2番目の部分が欠けていて(UTCからの整数分オフセットがある時間帯ではデフォルト値が0です)、現在の時間帯がUTCでない場合に使用されるため異なります。

タイムゾーンが UTC からの整数時間オフセットであると仮定すると、秒数を指定し、TZ=UTC0UTC でゼロオフセットを使用して年を実行すると警告が消えることがあります。したがって、入出力日は UTC です。

TZ=UTC0 tar -czvf /tmp/tmp.tar.gz --mtime="$(
  TZ=UTC0 date +'%F %H:00:00')" test

これはまた、冬時間に切り替える前に実行するときに間違った時間が選択されるという問題を解決します。

インドのUTC + 0530、ネパールのUTC + 0545、アデレードの夏のUTC + 1030、冬のUTC + 0930など、すべての時間帯で動作するようにするには、次の手順を実行できます。

TZ=UTC0 tar -czvf /tmp/tmp.tar.gz --mtime="$(
  TZ=UTC0 date -d "$(date +'%FT%H:00%z')" +'%F %T')" test

(UTCで整数以外の分にオフセットされたタイムゾーンでは機能しませんが、まだ存在していないようです。)

次の方法で²で始まるエラーメッセージをフィルタリングすることもできますtar: Option --mtime: Treating date

{
  tar... 2>&1 >&3 3>&- |
    grep -v '^Option --mtime: Treating date' >&2 3>&-
} 3>&1

ただし、これは stdout メッセージと stderr メッセージの相対順序に影響します。


--full-time¹UTCオフセットが含まれていないため、あいまいで後処理が不可能な形式(使用しても)です。

²このメッセージはユーザーのロケール(tar: Opción --mtime: Se trata la fecha '2022-10-10 01:30' como 2022-10-10 01:30:01スペイン語ロケール、tar: Option --mtime: Behandle Datum „2022-10-10 01:30“ als 2022-10-10 01:30:01ドイツ語ロケール...)によって異なり、バージョンによって異なる場合があります。

おすすめ記事