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