시간대 정보

시간대 정보

특정 형식의 파일 수정 시간을 알고 싶습니다.
어떻게 해야 하나요?
나는 대해 알고있다

stat -c %x find.txt

하지만 다음 형식이 필요합니다.

yyyymmddhh24miss

중요한 경우 ksh.Linux 2.6.18-406.el5 x86_64

답변1

GNU 도구 사용:

find file -prune -printf '%TY%Tm%Td%TH%TM%TS\n'

또는

date -r file +%Y%m%d%H%M%S.%N

(그러나 심볼릭 링크의 경우 수정 시간이 표시됩니다.표적심볼릭 링크 자체가 아닌 심볼릭 링크의 시간(이것은 아마도 심볼릭 링크의 런타임에 관심이 있는 사람과 같을 것입니다. 동일한 작업 -L수행 참조).find

귀하 ksh가 내장 기능을 활성화하여 구축한 ksh93경우 :date

command /opt/ast/bin/date -m -f %Y%m%d%H%M%S.%N file

( command /opt/ast/bin/date호출은 앞에 추가 하면 이름으로 호출할 때 자동으로 호출되는 date내장 함수에 바인딩 됩니다 .)/opt/ast/bin/date/opt/ast/bin$PATH

소수 부분을 신경쓰지 않는다면, .%N또는 를 제거하고 로 find바꾸세요 .%TS%.2TS

시간은 현재 시간대를 기준으로 표시됩니다. 이 날짜 형식에는 UTC 오프셋이 포함되어 있지 않으므로 모호할 수 있습니다. 예를 들어 영국 본토 시간대에서는 다음과 같습니다.

$ date -r file1
Sun 30 Oct 01:00:00 BST 2016
$ date -r file2
Sun 30 Oct 01:00:00 GMT 2016

두 파일은 3600초 간격으로 수정되었습니다. 하나는 겨울 시간으로 변경되기 전이고 다른 하나는 겨울 시간으로 변경된 후였습니다. 하지만 여전히 벽시계 시간은 같습니다(시계가 시간 간격에서 한 시간 뒤로 이동했기 때문입니다).

$ find file? -prune -printf '%TY%Tm%Td%TH%TM%TS\n'
20161030010000.0000000000
20161030010000.0000000000

명확한 시간을 얻으려면 UTC 오프셋을 포함할 수 있습니다.

$ find file? -prune -printf '%TY%Tm%Td%TH%TM%TS%Tz\n'
20161030010000.0000000000+0100
20161030010000.0000000000+0000

또는 UTC 시간이 주어지면:

$ TZ=UTC0 find file? -prune -printf '%TY%Tm%Td%TH%TM%TS\n'
20161030000000.0000000000
20161030010000.0000000000

답변2

다음과 같은 것을 사용할 수 있습니다.

/bin/date +%Y%m%d%H%M%S -d "$(/usr/bin/stat -c %x find.txt)"

답변3

문서개정하다시간은 날짜 형식으로 지정할 수 있습니다.

$ date -d @"$(stat -c %Y file1)" +'%Y%m%d%H%M%S'

%X마지막 액세스 시간과 %Z마지막 변경 에 사용됩니다 .

%X그러나 %Y, 및 의 최대 해상도 %Z는 초입니다.
나노초 분해능의 경우 및 %x옵션을 사용하십시오 .%y%z

$ date -d "$(stat -c %y file1)" +'%Y%m%d%H%M%S.%N'
20151101020000.012345678

이미 날짜 작업을 하고 있으므로 -r날짜 옵션을 사용하여 단순화하거나 find의 형식화된 출력을 사용할 수 있습니다.

$ date -r file1 +'%Y%m%d%H%M%S%z'
20151101010000-0500
$ find file1 -printf '%TY%Tm%Td%TH%TM%2.2TS%Tz\n'
20151101010000-0500

위 명령의 해상도는 초입니다. 나노초가 필요한 경우:

$ date -r file1 +'%Y%m%d%H%M%S.%N%z'
20151101010000.012345678-0500
$ find file1 -printf '%TY%Tm%Td%TH%TM%TS%Tz\n'
20151101010000.0123456780-0500

이 두 명령은 수정 시간을 제공합니다.
날짜에서는 이 -r옵션을 사용하여 액세스 또는 상태 시간을 얻을 수 없습니다.
조회 중: 접속 시간 %T를 %A로 변경, 상태 변경 시간 %C를 %C로 변경


시간대 정보

위의 모든 명령은 사용된 시간대의 영향을 받습니다.

$ date -r file1 +'%Y%m%d%H%M%S.%N%z'
20151101010000.012345678
$ TZ=GMT0 date -r file1 +'%Y%m%d%H%M%S.%N%z'
20151101060000.012345678

시간은 에서 으로 01변경됩니다 06. 이는 사용 중인 컴퓨터의 시간대가 로 설정되어 있기 때문에 발생합니다 America/New_York. 시간이 GMT0오프셋(또는 GMTOR ) 으로 계산되면 해당 값이 5시간 증가합니다 GMT+0.GMT-0

또한 현지 시간 값(불완전한 경우)을 사용하면 실제로는 다르지만 동일한 값을 렌더링할 수 있습니다.

$ date -r file1 +'%Y%m%d%H%M%S.%N'; date -r file2 +'%Y%m%d%H%M%S.%N'
20151101010000.012345678
20151101010000.012345678

%z이것이 바로 테일링이 필요한 이유이다.현지의빈도:

$ date -r file1 +'%Y%m%d%H%M%S.%N%z'; date -r file2 +'%Y%m%d%H%M%S.%N%z'
20151101010000.012345678-0500
20151101010000.012345678-0400

이로 인해 값이 달라집니다. 그러나 이 형식은 연대순 정렬을 어렵게 만듭니다. 이것이 바로 GMT시간 오프셋( %z)이 항상 0있고 생략될 수 있으므로 가장 좋은 해결책은 시간을 사용하는 것입니다.

$ ( TZ=GMT0; date -r file1 +'%Y%m%d%H%M%S.%N'; date -r file2 +'%Y%m%d%H%M%S.%N')
20151101060000.012345678
20151101050000.012345678

그리고 정렬도 가능합니다.

[1] 터치에 사용되는 파일의 값입니다.
touch -m -d '20151101 01:00:00.012345678-05' file1
touch -a -d '20151101 01:00:00.987654321-05' file1
touch -m -d '20151101 01:00:00.012345678-04' file2
touch - a -d '20151101 01:00:00.987654321-04' 파일 2

관련 정보