
나는 Linux에서 FreeBSD로 변환해야 하는 bash 스크립트를 가지고 있지만 적절한 방법으로 매뉴얼 페이지를 읽기에는 너무 멍청합니다.
스크립트에는 다음 줄이 있습니다.
date +%d -r "$file"
Linux에서는 잘 작동하지만
date: illegal time format
FreeBSD에서.
그만큼리눅스 맨페이지-r
이는 reference 파일을 지정하는 데 사용된다고 말합니다 .
-r, --reference=FILE
display the last modification time of FILE
여기서 나를 당황하게 만드는 것은FreeBSD 매뉴얼 페이지이 스위치에 대한 동일한 사용법을 포함하지만 대체 스위치도 제공합니다.
-r seconds
Print the date and time represented by seconds, where seconds is
the number of seconds since the Epoch (00:00:00 UTC, January 1,
1970; see time(3)), and can be specified in decimal, octal, or
hex.
-r filename
Print the date and time of the last modification of filename.
-r
분명히 위의 오류 메시지는 제공된 파일 이름 대신 스위치 에 대한 매개 변수로 UNIX 타임스탬프를 예상한 결과입니다 .
내가 이해하지 못하는 것은 스위치의 두 번째 해석을 사용하고 싶다는 것을 어떻게 분명히 해야 하는지입니다 -r
. 호출의 맥락에서 추론해야 한다면 이 맥락을 어떻게 제공해야 할지 혼란스럽습니다.
누구든지 나에게 날짜 유틸리티를 어떻게 알려야 하는지, -r
여기서 사용하려는 스위치의 사용 사례를 설명해 주시겠습니까?
답변1
-r
이 사용법은 소스에만 적용된 것 같습니다 .2015년 5월 7일. 아마도 귀하의 버전에서는 아직 이 작업을 수행하지 않습니까?
Revision 282608 - (view) (download) (annotate) - [select for diffs]
Modified Thu May 7 20:54:38 2015 UTC (12 months, 1 week ago) by delphij
date(1): Make -r behave like GNU's version when the option can not be
interpreted as a number, which checks the file's modification time and
use that as the date/time value.
답변2
스크립트에는 다음 줄이 있습니다.
날짜 +%d -r "$file"리눅스에서는 잘 작동하지만...
date
… FreeBSD/PC-BSD에서는 명령이 명령줄을 구문 분석하고 getopt()
옵션이 인수보다 앞에 있어야 하기 때문에 실패합니다 . 형식 문자열 +%d
은 인수이며 -r
옵션 뒤에 와야 합니다. 그렇지 않으면 -r
옵션으로 인식되지 않지만 (잘못된) 인수로 처리됩니다. 매뉴얼 페이지 의 명령 개요는 date
바로 이 순서로 표시된다는 점에 유의하십시오.
예, date
옵션 인수를 -r
숫자로 디코딩할 수 없는 경우에만 파일 이름으로 처리합니다. 네, 파일명이 숫자인 경우 문제가 됩니다. ☺
파일/디렉토리의 마지막 수정 시간을 읽는 더 나은 방법은 이름이 숫자와 유사할지 여부에 대해 걱정하지 않고 stat
... 명령이 될 것입니다. 그 자체로는 큰 어려움이 없습니다.
"`uname`"의 경우 리눅스) stat -c '%y' -- "$1"|cut -c9-10 ;; *BSD) stat -f '%Sm' -t '%d' -- "$1" ;; 에삭