私のスクリプトでは、次のようにファイルをパッケージ化しようとしています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
ソースコードからわかるように、tar
GNUは日付形式を再指定するたびに警告します。そしてtartime()
(例:YYYY-MM-DD HH:MM:SS1)ユーザー入力(そしてparse_datetime()
)は提供されたタイムスタンプとバイト単位で同じではなく、v
erboseがオンの場合にのみ適用されます。
--utc
ここでは、2番目の部分が欠けていて(UTCからの整数分オフセットがある時間帯ではデフォルト値が0です)、現在の時間帯がUTCでない場合に使用されるため異なります。
タイムゾーンが UTC からの整数時間オフセットであると仮定すると、秒数を指定し、TZ=UTC0
UTC でゼロオフセットを使用して年を実行すると警告が消えることがあります。したがって、入出力日は 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
ドイツ語ロケール...)によって異なり、バージョンによって異なる場合があります。