시간이나 날짜에 stat를 사용하세요. -r?

시간이나 날짜에 stat를 사용하세요. -r?

이런 식으로 폴더의 속성을 나열했습니다.

stat -c $'--------------
File:              %n
Size:              %s
Owner:             %U
Group:             %G
Permissions:       %A'

하지만 시간을 얻는 데 문제가 있습니다. stat를 사용하여 시간을 표현하면 끝에 마음에 들지 않는 숫자가 많이 표시되고 date -r을 사용하면 같은 내용을 쓸 수 없습니다. 거기 줄을 서세요. 저와 이전의 다른 모든 사람들처럼 말이죠.

다음과 같이 보이길 원합니다. 수정된 시간: 2019-11-13 11:34:54 (끝부분에 +0000 없음)

답변1

<rant> 귀하의 명령 statstat2001년에 이전 구현( 1997년 내장 명령 또는 이전 IRIX 등 ) stat과 완전히 다른 API를 사용하여 GNU coreutils에 나타났습니다 . 이는 GNU의 기능을 복사 하지만 다른 API( 다른 형식 지정자) 별로 유용하지 않은 것을 발견한 경우. 나는 그 이후로 이것 때문에 짜증이 났습니다. ( 1년 후, BSD는 다른 (비록 더 나은) API를 사용하여 자체statzshstatfind -printf%xstat API를 구현했습니다.) </rant>

여기에서 GNU를 사용할 수 있습니다 find(이 구문은 GNU보다 stat최소 10년 앞선 것입니다).

find ./* -prune -printf '--------------
File:              %f
Size:              %s
Owner:             %u
Group:             %g
Permissions:       %m
Modification time: %TF %8TT %Tz
'

출력은 다음과 같습니다.

--------------
File:              file
Size:              10
Owner:             stephane
Group:             stephane
Permissions:       -rw-r--r--
Modification time: 2019-11-13 11:34:54 +0000

여기서는 시간 형식이 사용됩니다 %F %T %z strftime(). 이는 타임스탬프를 초 단위까지 정확하게 표현하는 표준적이고 명확하며 필요에 따라 조정할 수 있습니다. %T<x>( 형식 지정자는 어디에 <x>있습니까 ?) ​​마지막 액세스 시간, 상태 변경 시간에 사용되는 마지막 수정 시간입니다.strftime()%A<x>%C<x>

%z시간대 오프셋 사양(위) 에 관심이 없다면 이를 제거하세요. 단, 이렇게 하면 시간 표현이 모호해집니다.%Tz

내장 (역시 statGNU zsh보다 몇 년 앞서 있음):

zmodload zsh/stat
for f (*) {
  stat -F '%F %T %z' -sLH s -- $f &&
    print -r -- "--------------
File:              $f
Size:              $s[size]
Owner:             $s[uid]
Group:             $s[gid]
Permissions:       $s[mode]
Modification time: $s[mtime]"
}

( %z시간대 오프셋을 보고 싶지 않다면 다시 삭제하세요.)

경고 참고 사항: 심볼릭 링크의 경우 GNU stat(없음 -L), GNU find -printf(없음 -L) 및 zsh는 stat -L심볼릭 링크 자체의 수정 시간을 보고하는 반면, GNU date -r(및 GNU stat -L, GNU 및 zsh 없음 find -L -printf)는 심볼릭 링크가 최종적으로 확인하는 파일의 mtime을 보고합니다. 도착하다.stat-L

관련 정보