내 스크립트에서는 다음을 사용하여 파일을 패키징하려고 합니다 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
여기서는 두 번째 부분이 누락되어 있고(UTC로부터의 정수 분 오프셋이 있는 시간대에서는 기본값이 0임) 현재 시간대가 UTC가 아닐 때 사용되기 때문에 다릅니다 .
시간대가 UTC로부터의 정수 시간 오프셋이라고 가정하면 TZ=UTC0
초 수를 지정하고 UTC에서 0 오프셋을 사용하여 연도를 실행하면 경고가 사라지도록 할 수 있습니다. 따라서 입력 및 출력 날짜는 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')