내가 읽고있다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 Date가 올바르게 구문 분석하는 날짜/시간의 올바른 형식은 다음과 같습니다.
$ 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
coreutils 8.21 부터 date
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
$
예상대로. 또한 소스 코드도 확인했습니다. 루틴에서 마법이 발생합니다 . 기본적으로 명령줄 사례(사용 ) 와 마찬가지로 /loop 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