
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
てファイルをパイプしてみることもできます:lpr
xargs
find . -wholename "*/dir/file.pdf" -print0 | xargs -0 lpr -P PRINTERNAME
答え3
find /home/.../.../** -exec lp {} \;