lprを使用して複数のファイルを同時に印刷するには?

lprを使用して複数のファイルを同時に印刷するには?

lprを使用してシェルから複数のファイルを印刷しようとしています。私は次のように入力します:

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が印刷キューに入っている必要があります。しかし、3つのタスクの代わりに1つのタスクがあります。オプションで設定しなかった場合、ジョブ名は最初のファイルで指定されます。

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 {} \;

関連情報