
Ich versuche, eine Reihe von Dateien von der Shell aus mit lpr auszudrucken. Ich gebe etwas ein wie:
lpr -P PRINTERNAME ./*/dir/file.pdf
aber ich erhalte die Meldung „lpr: Keine Datei in der Druckanforderung.“.
Wenn ich ls als
ls ./*/dir/file.pdf
Die Dateien, die ich drucken möchte, werden korrekt aufgelistet. Kann mir jemand helfen zu verstehen, was los ist?
Antwort1
Eine der Möglichkeiten, wie ich die Nachricht bekomme
lpr: Keine Datei in der Druckanforderung.
ist, wenn die erste Datei nach Muster eine leere Datei ist.
Z.B:
$ touch f0
$ echo A > f1
$ lpr f*
lpr: No file in print request.
Für Sie for
eine Alternative: Sie brauchen nicht ls
, da es tatsächlich anfällig für schwerwiegende Fehler ist, z. B. wenn Dateinamen Leerzeichen enthalten.
Alternativ könnten Sie Folgendes versuchen:
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
Und denken Sie daran, Zitate zu verwenden. Immer zitieren.
Beachten Sie außerdem:
Durch die Verwendung lpr PATTERN
werden alle Dateien in die Warteschlange gestellteinsJob mit dem Namen der ersten Datei in der Liste.
Das ist:
# List files:
ls file*
file1 file2 file3
# Add to print job
lpr file*
Jetzt sollten sich Datei1, Datei2 und Datei3 in der Druckwarteschlange befinden – aber nicht als drei Aufträge, sondern als einer. Der Name des Auftrags wird aus der ersten Datei übernommen, wenn er nicht durch die Option festgelegt wurde:
lpq
Rank Owner Job File(s) Total Size
1st user 80 file1 9248 bytes
|
+----- Actually is file1, file2, file3
Wenn ja, lp
wird dies ausführlicher gemeldet durch:
lp file*
request id is PRINTER-362 (3 file(s))
Wenn Sie möchten, können Sie dem Job auch einen Namen geben, zum Beispiel:
lpr -T "My 3 Files" file*
lpq
Rank Owner Job File(s) Total Size
1st user 80 My 3 Files 9248 bytes
Antwort2
Ohne das Layout Ihrer Verzeichnisse im Detail zu kennen, würde ich vermuten, dass es Probleme beim Interpretieren der verschiedenen Unterverzeichnisebenen oder vielleicht Leerzeichen in Dateinamen gibt.
Sie können versuchen, die Dateien mit find
folgendem Befehl weiterzuleiten :lpr
xargs
find . -wholename "*/dir/file.pdf" -print0 | xargs -0 lpr -P PRINTERNAME
Antwort3
find /home/.../.../** -exec lp {} \;