
제안을 바랍니다. 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
파일을 열별로 stdout으로 인쇄하는 것이므로 여러 파일 이름이 한 줄에 포함될 수 있다는 것입니다. 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
심지어 악명 높은 것처럼 보이는 부적절하게 이스케이프된 파일 이름으로 인해 이 문제가 발생할 수 있습니다 . 이것을 더욱 안전하게 만드는 것은 확실히 가능하지만, 그것은 내 손이 닿지 않는 곳에 있습니다. 다른 사용자에게 맡기겠습니다.