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すべてのファイルを使用することでキューに入れられます1つリストの最初のファイルとしてジョブの名前が指定されました。

あれは:

# 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てファイルをパイプしてみることもできます:lprxargs

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

答え3

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

関連情報