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

正如源代码中所示,tar每当重新格式化日期时,GNU 都会向您发出警告tartime()(如 YYYY-MM-DD HH:MM:SS1)从用户输入解析(parse_datetime()) 与提供的时间戳并不逐字节相同,并且仅当verbose 打开时才如此。

在这里,这是不同的,因为第二部分丢失了(在与 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=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德语区域设置...并且可能因版本而异

答案2

你可以这样做:

tar czfv ..... 2> >(grep -v 'tar: Option --mtime')

相关内容