특정 형식의 파일 수정 시간을 알고 싶습니다.
어떻게 해야 하나요?
나는 대해 알고있다
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
오프셋(또는 GMT
OR ) 으로 계산되면 해당 값이 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