이 명령의 GNU 구현에는 date
참조 파일의 마지막 수정 날짜를 표시하는 멋진 기능이 있습니다. 그런 다음 해당 +FORMAT
매개변수를 사용하여 어떤 형식으로든 날짜를 쉽게 가져올 수 있습니다. 예를 들면 다음과 같습니다.
date -r /etc/motd +%Y%m%d_%H%M%S
# output in the format: 20121001_171233
Solaris에도 동등한 방법이 있습니까? 해결 방법으로 stat
다음과 같은 기능을 사용했습니다 .perl
perl -mPOSIX -e 'print POSIX::strftime("%Y%m%d_%H%M%S\n", localtime((stat("/etc/motd"))[9]))'
또 다른 옵션은 다음 출력을 구문 분석하는 것입니다 ls -Ego
.
ls -Ego /etc/motd | awk '{print $4 "_" $5}' | tr -d :- | sed -e 's/\..*//'
그러나 구문 분석된 출력은 ls
나쁜 습관으로 알려져 있습니다.
더 좋고, 더 간단하고, 더 우아한 솔루션이 있습니까?
답변1
현재 날짜 이외의 date
날짜를 인쇄할 수 없다는 점은 종종 불행한 결함입니다. 일부 유니스에서는 다른 날짜를 인쇄할 수 있지만 불행하게도 솔라리스에서는 그렇지 않습니다.
숫자 출력만 필요한 경우 출력을 구문 분석할 수 있습니다 ls -Ego
. 이러한 옵션은 -go
사용자 및 그룹 이름을 억제하며 -E
Solaris에만 적용됩니다 .ls
이를 통해 구문 분석 가능한 형식으로 시간을 표시할 수 있습니다.
ls -Ego /path/to/file |
awk 'NR==1 {$0 = $4 "_" $5; gsub(/[-:]/,""); sub(/\..*/, ""); print}'
(이것은 작동 /usr/bin/ls
하지만 POSIX 호환 awk가 필요하므로 /usr/xpg4/bin
또는 앞에 또는 전화가 있는지 확인하십시오.)/usr/xpg6/bin
/usr/bin
PATH
nawk
답변2
저는 Perl이 최선의 방법이라고 생각합니다. 저는 Solaris에서 유용한 날짜 변환기를 알지 못하며 date
명령은 현재 시간만 인쇄하거나 설정합니다.
답변3
글쎄요, 정확히 원하는 형식은 아니지만 어떻습니까?
stat -c %y /etc/motd
=>
2011-03-08 11:39:20.000000000 +0000
그런 다음 원하는 것을 사용하여 해당 타임스탬프를 형성하세요.
편집하다
나는 OpenSolaris나 Solaris 11이 GNU 버전과 함께 번들로 제공된다고 가정합니다 stat
.