Wie kann ich die Ausgabe von ls/grep als Eingabe für pdfunite verwenden?

Wie kann ich die Ausgabe von ls/grep als Eingabe für pdfunite verwenden?

Ich möchte pdfunite verwenden, um mehrere PDF-Dateien in eine Ausgabedatei zusammenzufügen. Da das Verzeichnis viele verschiedene Dinge enthält, dachte ich, ich könnte ls/grep verwenden, um die entsprechenden Dateinamen zu ermitteln und sie dann mit pdfunite zusammenzufügen. Die Ausgabe von ls/grep sieht folgendermaßen aus:

ls | grep "handout...pdf" 
handout01.pdf*
handout02.pdf*
handout03.pdf*
handout04.pdf*
handout05.pdf*
handout06.pdf*

Dann möchte ich pdfunit aufrufen, das die folgende Syntax hat:

 pdfunite [options] PDF-sourcefile1..PDF-sourcefilen PDF-destfile

Mein Problem ist, dass ich die Ausgabe von ls/grep anscheinend nicht in pdfunite weiterleiten kann, weil das nicht so funktionieren soll. Wenn ich es hingegen versuche:

pdfunite ls | grep "handout...pdf" grep.pdf

dann beschwert sich grep offensichtlich über meine gewählte Ausgabedatei:

grep: grep.pdf: No such file or directory

Ich weiß, dass ich zwei separate Schritte ausführen könnte und dann würde es funktionieren, aber ich möchte herausfinden, wie ich das mit einer Zeile machen kann.

Antwort1

Wenn Ihre Dateimuster so einfach sind, brauchen Sie eigentlich keinen regulären Ausdruck und können ein einfaches Platzhalterzeichen verwenden:

pdfunite handout??.pdf

Andernfalls können Sie mit dem findBefehl und -regex einen regulären Ausdruck verwenden, aber ich konnte keine Möglichkeit finden, ihn auszuführen, ohne dass die Möglichkeit einer Aufteilung in mehrere Dateigruppen besteht. Einige der Möglichkeiten, dies zu tun, hängen auch davon ab, dass keiner der Dateinamen Leerzeichen enthält.

Antwort2

Ich glaube, dafür kann man das „Häkchen“ verwenden (das Ding über der Tilde). Versuchen Sie es mit etwas wie diesem:

pdfunite [options] `ls | grep "handout...pdf"`

So wie ich das verstehe, verschachtelt man einen Befehl. Alles innerhalb der Ticks wird als eigener Befehl ausgeführt und die Ausgabe davon ersetzt die Ticks. Der obige Befehl entspricht also im Wesentlichen

pdfunite [options] handout01.pdf* handout02.pdf* ...

Antwort3

Du brauchst nicht unbedingt ein grep. Du kannst das Muster weitergeben an ls.

pdfunite $(ls handout*.pdf*) merged.pdf

verwandte Informationen