Shell-Script

焦油抑制消息“將日期…視為…”

  • October 24, 2022

在我的腳本中,我嘗試使用以下內容打封包件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在德語中……並且可能因版本而異

引用自:https://unix.stackexchange.com/questions/722143