在我的脚本中,我尝试使用以下内容打包文件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 有整数分钟偏移量的时区中默认为 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')