如何使用lpr同时打印多个文件?

如何使用lpr同时打印多个文件?

我正在尝试使用 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并将文件通过管道传输lprxargs

find . -wholename "*/dir/file.pdf" -print0 | xargs -0 lpr -P PRINTERNAME

答案3

find /home/.../.../** -exec lp {} \;

相关内容