나에게 조언을 해주실 수 있기를 바랍니다. Mac OS X Catalina에서 쉘 스크립트를 사용하면 스크립트가 중단됩니다. 많은 보안 변경 사항이 있다는 것을 알고 있지만 지금까지 다운로드 폴더에 액세스하기 위한 수정 사항을 찾지 못했습니다. 인쇄할 파일에 접근할 수 없기 때문에 스크립트에 오류가 발생했습니다. 스크립트는 다음과 같습니다
do shell script "cat `ls -t /UserName/Downloads/Barcodes*.zpl | head -1` | lpr -P BarcodePrinter -o raw " with administrator privileges
파일 위치에 대한 여러 수정이 시도되었습니다. 다운로드 폴더에는 *
바코드 파일에서 생성된 20자 이상의 문자가 가변적인 긴 이름의 파일이 여전히 포함되어 있습니다. 프린터 이름은 여전히 일치하지만 오류는 다음과 같습니다.
No such file or directory
lpr: No file in print request
어떤 제안이라도 감사하겠습니다. 포럼을 검색했지만 초보자이고 올바른 해결책을 찾을 수 없는 것 같습니다.
답변1
명령 자체가 정확하다고 zsh
가정하고 macOS에서 셸을 사용합니다 .lpr
lpr -P BarcodePrinter -o raw < ~/Downloads/Barcodes*.zpl(.Nom[1])
glob (.Nom[1])
한정자는 이전 globbing 패턴의 동작을 변경하여 일반 파일에만 일치하고(이것이 바로 그 일입니다 .
) 일치하는 항목이 없으면 전혀 확장되지 않습니다( , 셸 에서 N
해당 ).nullglob
bash
수정 타임스탬프 순서대로 일치하는 결과를 정렬 om[1]
하고 가장 최근에 수정된 일치 파일인 목록의 첫 번째 항목만 선택합니다.
패턴이 아무것도 일치하지 않으면 쉘이 불평할 것입니다(잘못된 디렉토리를 지정하거나 잘못된 파일 이름을 입력하면 이 작업이 수행되지 않습니다).
zsh: no such file or directory: ~/Downloads/Barcodes*.zpl(.Nom[1])
쉘이 그러한 오류를 보고할 때 항상 찾을 수 없는 파일의 경로 이름을 기록합니다(이 경로 이름은 질문의 오류에서 누락되어 문제 진단을 더 쉽게 만듭니다).
아래 댓글에 게시된 추가 정보를 통해 파일의 실제 이름이 일치 ~/Downloads/zebraBarcodes*.zpl
하는지 ~/Downloads/*Barcodes*.zpl
여부 가 분명해졌습니다 ~/Downloads/Barcodes*.zpl
. 업데이트된 패턴을 사용한 위와 동일한 접근 방식이 작동합니다.
답변2
아마도 여기서 일어나는 일은 기본 동작이 ls
파일을 열 단위로 표준 출력으로 인쇄하는 것이므로 한 줄에 여러 파일 이름이 나타날 수 있다는 것입니다. ls
전체 파일 이름(예: 디렉터리 접두사 포함)도 인쇄되지 않으므로 cd
먼저 명령을 사용하면 후속 명령이 선택한 파일을 올바르게 찾을 수 있도록 디렉터리로 이동합니다. 나는 ls
그러한 파일을 필터링하기 위해 glob을 사용하지 않을 것입니다 . grep
정규식을 사용하는 를 사용하세요 .
노력하다:
cd /Username/Downloads | dir -w 1 -t /UserName/Downloads/ | grep "^Barcodes.*\.zpl$" | head -1 | lpr -P BarecodePrinter -o raw
또한 프린터의 "BarecodePrinter" 철자가 올바른지 확인하십시오.
그래요아니요구문 분석할 파일을 사용 ls
하거나 나열하는 것이 더 좋을 것이지만 마법이 없는 것처럼 시간별로 정렬하도록 올바르게 설정하는 방법을 모르겠습니다 .dir
find
ls
awk
그리고 find
, sort
그리고 awk
:
find /UserName/Downloads -maxdepth 1 -printf "\n%AD %AT %p\n" | grep ".*Barcodes.*\.zpl$" | sort -r | awk '{ print $3 }' | head -1 | lpr -P BarecodePrinter -o raw
심지어 파일 이름을 부적절하게 이스케이프 처리하면 문제가 발생할 수 있는데, 이는 find
악명 높은 것으로 보입니다. 이것을 더 안전하게 만드는 것은 확실히 가능하지만 그것은 내 능력을 벗어납니다. 다른 사용자에게 맡기겠습니다.