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" ;; 이삭