FreeBSD 날짜 유틸리티 -r 스위치가 나를 혼란스럽게 합니다.

FreeBSD 날짜 유틸리티 -r 스위치가 나를 혼란스럽게 합니다.

나는 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" ;;
에삭

관련 정보