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

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

Linux에서 FreeBSD로 변환해야 하는 bash 스크립트가 있지만 매뉴얼 페이지를 올바른 방식으로 읽기에는 너무 어리석은 것 같습니다.

스크립트에는 한 줄이 있습니다.

date +%d -r "$file"

리눅스에서는 잘 작동하지만 단지 제공합니다

date: illegal time format

FreeBSD에서.

이것리눅스 매뉴얼 페이지-r지정된 참조 파일을 나타냅니다 .

   -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... 명령이 명령줄을 구문 분석 getopt()하고 옵션이 엄격하게 인수보다 앞에 있어야 하기 때문에 FreeBSD/PC-BSD에서는 실패합니다 . 형식 문자열은 +%d매개변수이며 -r옵션 뒤에 와야 합니다. 그렇지 않으면 -r옵션으로 인식되지 않고 (잘못된) 매개변수로 처리됩니다. 매뉴얼 페이지의 명령 요약에는 date이 순서로 표시되어 있습니다.

예, date옵션 인수는 숫자로 디코딩할 수 없는 경우에만 파일 이름으로 처리됩니다. -r예, 파일 이름이 숫자인 경우 문제가 됩니다. ☺

stat파일/디렉토리의 마지막 수정 시간을 읽는 더 좋은 방법은 명령을 사용하는 것입니다... 그 자체로 큰 어려움이 없다면 이름이 숫자와 비슷한지 걱정할 필요가 없습니다.

사례 "`uname`"
리눅스) stat -c '%y' -- "$1"|cut -c9-10 ;;
*BSD) stat -f '%Sm' -t '%d' -- "$1" ;;
이삭

관련 정보