我正在尝试使用 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 {} \;