![마지막 수정 날짜를 다른 파일로 출력하시겠습니까?](https://linux55.com/image/28509/%EB%A7%88%EC%A7%80%EB%A7%89%20%EC%88%98%EC%A0%95%20%EB%82%A0%EC%A7%9C%EB%A5%BC%20%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EC%B6%9C%EB%A0%A5%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
파일의 줄 수와 파일의 마지막 수정 날짜를 읽으려고 합니다(예를 들어 마지막 수정 날짜가 2013년 1월 18일인 경우 출력되어야 함 2013-01-18
). 그런 다음 해당 데이터를 다음과 같은 입력 파일에 추가합니다. 형태 theFile: 4 lines, modified on 2013-01-18
. 에코를 사용하여 출력하기 전에 이 두 데이터를 자체 변수에 저장해 보았습니다.
#!/bin/sh
totLines=$(wc -l < $1)
modDate=$(date -r $1)
echo $1: $totLines "lines, modified on" $modDate >> $1
마지막 수정 날짜를 찾는 방법이 정확합니까? 나는 그렇다고 들었지만 그것에 대한 정보를 찾을 수 없고 date -r
내가 시도하는 어떤 스크립트에서도 작동하도록 할 수 없기 때문에 이유를 이해할 수 없습니다. 통계를 사용하는 것도 있지만 stat -c %y $1
내가 얻는 곳에서는 사용할 수 없습니다.stat: illegal option -- c
답변1
둘 다 GNU에 date -r
특화 되어 있습니다 stat
. 아마도 Linux 사용자는 다른 시스템을 사용하고 있다고 말할 수도 있습니다.
불행하게도 이 정보를 안정적으로 얻을 수 있는 표준 명령은 없습니다. 가장 휴대성이 뛰어난 것은 다음과 같습니다.
modDate=$(perl -MPOSIX -le '@s=stat shift or die$!;
print strftime "%Y-%m-%d", localtime $s[9]' -- "$1") || exit
zsh
자체 내장 stat
명령이 있습니다.
zmodload zsh/stat
zstat -F %F +mtime -- "$1"
(symlink에 대한 위의 두 명령은 GNU에서와 마찬가지로 심볼릭 링크 대상의 수정 시간을 반환합니다 date -r
. 심볼릭 링크의 시간을 원하는 경우(GNU 명령과 마찬가지로 ) stat
솔루션을stat
로 변경하거나 추가합니다.) .lstat
perl
-L
zstat
반품,변수 주위에 큰따옴표를 잊어버렸습니다.그리고 임의의 데이터에 사용해서는 안 됩니다 echo
.