
Я пытаюсь распечатать несколько файлов из оболочки с помощью 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 должны быть в очереди печати – но не как три задания, а как одно. Имя задания берется из первого файла, если не задано опцией:
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 {} \;