나는 그것을 통해 읽고있다GNU coreutils 매뉴얼, 그리고 명령을 실험하고 있습니다 date
. 제가 본문에서 찾은 내용은 다음과 같습니다.
명령 에는 다음과 같은 옵션이
date
있습니다 .-f datefile
- 각 줄을 구문 분석하십시오.날짜 파일와 마찬가지로
-d
결과 날짜와 시간을 표시합니다. - 즉,
date
각 줄을 살펴보는 것입니다.날짜 파일 특정 날짜를 표시하는 데 사용하기 위한 날짜 문자열로 처리합니다.
- 각 줄을 구문 분석하십시오.날짜 파일와 마찬가지로
~ 안에제 29 장 (날짜 입력 형식), 다음과 같이 명시되어 있습니다.
date
언어 문제뿐만 아니라 'IST'와 같은 시간대 항목에 대한 표준 의미가 없기 때문에 명령 의 출력이 항상 날짜 문자열로 허용되는 것은 아닙니다.date
나중에 구문 분석할 날짜 문자열을 생성하는 데 사용하는 경우, 언어에 독립적이고 'UTC' 및 'Z' 이외의 시간대 항목을 사용하지 않는 날짜 형식을 지정합니다. 이를 수행하는 몇 가지 방법은 다음과 같습니다.$ LC_ALL=C TZ=UTC0 date ︙
- 이 진술(특히 굵은 글씨 부분)은 내가 다음과 같은 내용을 넣을 수 있어야 한다는 것을 암시합니다. 날짜 파일
date
위와 같은 명령이 있고 터미널date
에서 실행한 명령은 해당date
명령을 구문 분석할 수 있어야 합니다.날짜 파일 해당 날짜를 출력합니다.
- 이 진술(특히 굵은 글씨 부분)은 내가 다음과 같은 내용을 넣을 수 있어야 한다는 것을 암시합니다. 날짜 파일
그것은 나를 위해 작동하지 않습니다. 날짜 파일의 날짜 명령에 문제가 있거나(잘못된 인용 부호, 내가 알지 못하는 일부 특수 구문...) 옵션이 -f datefile
이 상황을 처리할 수 없습니다.
제가 묻고 있는 내용을 요약하면 이렇습니다.
date -f
한 줄의 날짜 문자열이 다른 날짜 명령인 파일에 명령을 공급할 수 있습니까 ? 예를 들어 파일의 첫 번째 줄에 문자열 "date"를 넣은 다음(명령으로 시스템 시간을 반환함) 해당 파일을 명령에 입력하고date -f
현재 시스템 시간(date
명령 으로 생성됨)을 가져올 수 있습니까? 파일에서)?
답변1
GNU 날짜로 올바르게 구문 분석되는 날짜-시간의 올바른 형식은 다음과 같습니다.
$ LC_ALL=C TZ=UTC0 date +"%Y-%m-%dT%H:%M:%S%z"
2016-09-28T04:08:55+0000
그리고 이는 다른 문제를 일으킬 수 있는 공백도 방지합니다.
파일에 다음과 같이 날짜당 한 줄이 포함되어 있는 경우:
$ cat dates.txt
1992-03-28T14:26:01+0000
2004-02-29T21:02:02+0000
2005-02-28T21:02:03+0000
2015-07-02T11:52:04+0000
2016-03-31T01:36:05+0000
그러면 다음과 같이 작동합니다.
$ TZ=America/Los_Angeles date -f infile
Sat Mar 28 06:26:01 PST 1992
Sun Feb 29 13:02:02 PST 2004
Mon Feb 28 13:02:03 PST 2005
Thu Jul 2 04:52:04 PDT 2015
Wed Mar 30 18:36:05 PDT 2016
원하는 작업이 다음과 같이 "날짜 명령"을 사용하여 파일을 만드는 것이라면:
$ cat dates.txt
date -d "1992-03-28T14:26:01+0000"
date -d "2004-02-29T21:02:02+0000"
LC_ALL=C TZ=UTC0 date -d "2005-02-28T21:02:03+0000" +"%Y-%m-%d"
TZ=America/Los_Angeles date -d "2005-02-28T21:02:03+0000"
date -d "2015-07-02T11:52:04+0000"
date -d "2016-03-31T01:36:05+0000"
그런 다음 셸을 사용하여 각 줄을 실행해야 합니다.
한 가지 빠른 해결 방법은 파일을 소싱하는 것입니다. 그러면 모든 명령이 실행됩니다.
$ . ./dates.txt
Sat Mar 28 14:26:01 GMT 1992
Sun Feb 29 21:02:02 GMT 2004
2005-02-28
Mon Feb 28 13:02:03 PST 2005
Thu Jul 2 11:52:04 GMT 2015
Thu Mar 31 01:36:05 GMT 2016
이것이 귀하의 질문에 대한 답변입니까?
답변2
date
coreutils 8.21부터 TZ=UTC 및 LC_ALL=CI를 얻습니다 .
$ date > x; sleep 1; date >> x; sleep 1; date >> x
$ date -f x
Wed Sep 28 03:32:39 UTC 2016
Wed Sep 28 03:32:40 UTC 2016
Wed Sep 28 03:32:41 UTC 2016
$
예상대로. 소스 코드도 확인했습니다. 명령줄의 경우( 사용 ) 와 마찬가지로 batch_convert
기본적으로 루프 오버가 있는 루틴에서 마법이 발생합니다 parse_datetime()
.show_date()
-d
답변3
아니요 . LC_ALL=C TZ=UTC0
.date -f
cat tz
LC_ALL=C TZ=UTC0
date -f tz
date: invalid date ”LC_ALL=C TZ=UTC0”
그러나 다음과 같이 전체 명령을 파일에 넣을 수 있습니다.
cat date
#!/bin/bash
LC_ALL=C TZ=UTC0 date
그런 다음 명령줄에서 실행하면 다음이 제공됩니다.
./date
Tue Sep 27 06:56:29 UTC 2016
내 서버의 시간대와 반대되는 점은 다음과 같습니다.
date
tis 27 sep 2016 08:56:52 CEST