
我正在嘗試使用 lpr 從 shell 列印多個檔案。我輸入類似:
lpr -P PRINTERNAME ./*/dir/file.pdf
但我得到“lpr:列印請求中沒有文件。”。
當我使用 ls 作為
ls ./*/dir/file.pdf
它正確列出了我要列印的文件。有人可以幫助我了解發生了什麼事嗎?
答案1
我獲取訊息的方式之一
lpr:列印請求中沒有文件。
是當模式的第一個檔案是空文件時。
例如:
$ touch f0
$ echo A > f1
$ lpr f*
lpr: No file in print request.
為您提供for
替代方案 - 您不需要ls
;實際上,它很容易出現嚴重錯誤,例如,如果檔案名稱包含空格。
作為替代方案,您可以嘗試:
shopt -s nullglob # So that if there are no matches you won't try to send
# pattern to printer.
for x in ./*/dir/file.pdf; do
lpr -P PRINTERNAME "$x";
done
shopt -u nullglob # Restore
並記住引用。總是引用。
另請注意:
透過使用lpr PATTERN
所有文件排隊一作業名為清單中的第一個檔案。
那是:
# List files:
ls file*
file1 file2 file3
# Add to print job
lpr file*
現在 file1 file2 和 file3 應該在列印佇列中 - 但不是三個作業,而是一個。如果未通過選項設置,作業名稱將從第一個文件中給出:
lpq
Rank Owner Job File(s) Total Size
1st user 80 file1 9248 bytes
|
+----- Actually is file1, file2, file3
如果您有lp
此情況,則會透過以下方式更詳細地報告:
lp file*
request id is PRINTER-362 (3 file(s))
如果您願意,您也可以透過以下方式為作業設定名稱:
lpr -T "My 3 Files" file*
lpq
Rank Owner Job File(s) Total Size
1st user 80 My 3 Files 9248 bytes
答案2
在不知道目錄佈局的詳細資訊的情況下,我猜測它在解釋不同層級的子目錄或檔案名稱中的空格時遇到困難。
您可以嘗試使用find
並將文件透過管道傳輸lpr
到xargs
:
find . -wholename "*/dir/file.pdf" -print0 | xargs -0 lpr -P PRINTERNAME
答案3
find /home/.../.../** -exec lp {} \;