焦油抑制消息“將日期…視為…”
在我的腳本中,我嘗試使用以下內容打封包件
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
如何抑制此輸出
你可以這樣做:
tar czfv ..... 2> >(grep -v 'tar: Option --mtime')
從原始碼中可以看出,每當從使用者輸入( with )解析的日期重新格式化(如 YYYY-MM-DD HH:MM:SS¹)與提供的時間戳不同字節到字節時,GNU都會警告您
tar
,並且僅在打開 erbose 時。tartime()
parse_datetime()
v
在這裡,這是不同的,因為缺少第二部分(在與 UTC 有一個整數分鐘偏移的時區中預設為 0),並且還因為
--utc
噹噹前時區與 UTC 不一致時,使用 , 。假設您所在的時區與 UTC 的偏移量為整數小時,如果您指定秒數並使用
TZ=UTC0
: 0 全年與 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=UTC 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
在德語中……並且可能因版本而異