
Estou tentando imprimir vários arquivos do shell usando lpr. Eu insiro algo como:
lpr -P PRINTERNAME ./*/dir/file.pdf
mas recebo "lpr: Nenhum arquivo na solicitação de impressão".
Quando eu uso ls como
ls ./*/dir/file.pdf
ele lista corretamente os arquivos que desejo imprimir. Alguém pode me ajudar a entender o que está acontecendo?
Responder1
Uma das maneiras de receber a mensagem
lpr: Nenhum arquivo na solicitação de impressão.
é quando o primeiro arquivo por padrão é um arquivo vazio.
Por exemplo:
$ touch f0
$ echo A > f1
$ lpr f*
lpr: No file in print request.
Para você for
alternativa - você não precisa ls
; na verdade, é propenso a erros graves, por exemplo, se os nomes dos arquivos contiverem espaços.
Como alternativa você pode tentar:
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
E lembre-se de Citar. Sempre cite.
Observe também:
Ao usar lpr PATTERN
todos os arquivos, eles ficam na fila paraumtrabalho nomeado como primeiro arquivo na lista.
Aquilo é:
# List files:
ls file*
file1 file2 file3
# Add to print job
lpr file*
Agora arquivo1 arquivo2 e arquivo3 devem estar na fila de impressão – mas não como três trabalhos, mas como um. O nome do trabalho é fornecido no primeiro arquivo, se não for definido pela opção:
lpq
Rank Owner Job File(s) Total Size
1st user 80 file1 9248 bytes
|
+----- Actually is file1, file2, file3
Se você tiver, lp
isso será relatado de forma mais detalhada por:
lp file*
request id is PRINTER-362 (3 file(s))
Se desejar, você também pode definir um nome para o trabalho, por exemplo:
lpr -T "My 3 Files" file*
lpq
Rank Owner Job File(s) Total Size
1st user 80 My 3 Files 9248 bytes
Responder2
Sem conhecer os detalhes do layout dos seus diretórios, acho que está tendo problemas para interpretar os diferentes níveis de subdiretórios ou talvez espaços nos nomes dos arquivos.
Você pode tentar usar find
e canalizar os arquivos lpr
com xargs
:
find . -wholename "*/dir/file.pdf" -print0 | xargs -0 lpr -P PRINTERNAME
Responder3
find /home/.../.../** -exec lp {} \;