Wie kombiniert man mehrere PDF-Dateien basierend auf Speicherort und Name mit der Befehlszeile?

Ich habe mehrere Ordner mit dieser Struktur:

Ordnername/ tmp

Anderer Ordnername/tmp

usw...

Im tmp-Ordner habe ich viele PDF-Dateien mit diesem Namensmuster:

pdf-name-1.pdf pdf-name-2.pdf .... und mehr

Ich suche nach einer Möglichkeit, alle PDF-Dateien in allen tmp-Verzeichnissen mit dieser Namensstruktur zusammenzuführen, Original-PDFs in den Papierkorb zu verschieben und kombinierte PDFs in pdf-name.pdf umzubenennen

Gibt es eine Möglichkeit, dies über die Befehlszeile oder das Bash-Skript in macOS zu tun?

Vielen Dank.

UPDATE ZUR KLÄRUNG

Ich muss alle PDFs in einem eigenen tmp-Ordner kombinieren, nicht alle PDFs in ALLEN tmp-Ordnern.

Antworten (2)

Obwohl Sie ausdrücklich nach einem Bash-Skript gefragt haben, könnten Sie als ergänzende Antwort die Verwendung des folgenden Python-Skripts in Betracht ziehen. Interessanterweise wurde ein Teil des Python-Projekts (Ipython) speziell entwickelt, um bash zu ersetzen .

from PyPDF2 import PdfFileMerger
import os 



def merge_it(files,path):
    merger = PdfFileMerger()
    for file in files:
        merger.append(file)

    merger.write(os.path.join(path,"combined_file.pdf"))
    merger.close()


for path, dirs, files in os.walk(os.getcwd()):
    for dir in dirs:
        if dir == 'tmp':

            pdf_files = []
            for file in os.listdir(os.path.join(path,dir)):
                if file.endswith(".pdf"):
                    pdf_files.append(os.path.join(path,dir, file))
            merge_it(pdf_files,os.path.join(path,dir))

Das, was dieses Programm verlangt, ist, die Pfade fest zu codieren, die /tmp-Unterordner enthalten. Dies kann auch automatisiert werden, je nachdem, wie viel Automatisierung Sie möchten. Ich werde nicht empfehlen, Original-PDFs zu entfernen, es sei denn, sie nehmen zu viel Platz ein.

UPDATE : Sucht nach allen Unterordnern mit dem Namen „tmp“ im aktuellen Arbeitsverzeichnis und kombiniert alle PDF-Dateien in jedem der tmp-Ordner.

Danke für Ihre Antwort. Es gibt mehr als 1000 tmp-Ordner, also brauche ich ein automatisiertes Skript. Nochmals vielen Dank für Ihre Hilfe.
@Jose: Meine Antwort bearbeitet. Dies funktioniert jetzt auch für das automatische Finden von tmp-Ordnern
Danke, ich muss alle PDFs in einem eigenen tmp-Ordner kombinieren, nicht alle PDFs in ALLEN tmp-Ordnern. Ich habe die Fragebeschreibung bereits aktualisiert...
@Jose, hat den Code aktualisiert, um Ihre "aktualisierten" Anforderungen widerzuspiegeln. Wenn es funktioniert, könnten Sie freundlicherweise meine Antwort akzeptieren.
Danke schön. Es scheint, dass das Skript funktioniert, aber einige weiße leere Seiten in die kombinierte PDF-Datei eingefügt wurden. Übrigens, gibt es einen Trick, um nur bestimmte Dateien basierend auf dem Namen zu kombinieren? Danke.
@Jose: Es fügt keine leere Seite für mich hinzu. Möglicherweise sind einige Ihrer PDFs leer. Könntest du das überprüfen? Natürlich können Sie bestimmte PDF-Dateien auswählen, indem Sie die Zeile im Skript bearbeiten: if file.endswith(".pdf"):bis if file.endswith(".pdf") and 'name' in fileoder so ähnlich, je nach Ihren Anforderungen.

Anscheinend /System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.pyist es ein natives Tool auf dem Mac, um mehrere PDF-Dateien zu kombinieren. Wenn das nicht ganz das tut, was Sie wollen, müssen Sie zusätzliche Software installieren, um diesen Teil zu handhaben. Sehen Sie sich dazu Imagemagick , Graphicsmagick oder pdfjam an . Ich bin sicher, es gibt noch viele andere.

Für den Skriptteil können Sie alles mit einem Einzeiler erledigen (hier der Einfachheit halber gebrochen dargestellt, aber Sie können alles in eine Zeile schreiben):

for tmpdir in $(find . -type d -name "tmp"); do 
    list_of_files_to_combine=$(find . -name "*.pdf") && echo "Combining pdf files in $d" && some_pdf_combiner_tool $list_of_files_to_combine pdf-name.pdf && rm $list_of_files_to_combine;
done

Ersetzen Sie some_pdf_combiner_tooldurch den Namen des oben ausgewählten Tools.

Ich empfehle, dies gründlich zu testen, um sicherzustellen, dass das Kombinieren funktioniert, bevor Sie die ursprünglichen PDF-Dateien löschen.

Beachten Sie auch, dass rmdas Terminal die Dateien nur direkt löscht und nicht in den Papierkorb legt, um sie möglicherweise später abzurufen. Wenn es Ihnen wichtig ist, sie von der Befehlszeile aus in den Papierkorb zu verschieben, lesen Sie Wie verschiebt man Dateien von der Befehlszeile in den Papierkorb?

Hier ist eine native macOS-Anwendung, die pdfs- /System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py beitreten wird
Upvoted for Hervorheben des Problems rm vs trash.
Vielen Dank für Ihre Antwort, aber dieser Befehl kombiniert alle PDFs in einem beliebigen tmp-Ordner in einem PDF, und ich muss die PDFs in einem eigenen tmp-Ordner kombinieren.
OK @jose, ich habe den Beitrag bearbeitet, um stattdessen PDFs in jedem tmp-Ordner zu kombinieren.
Warum ist das Looping über die Ausgabe von find eine schlechte Praxis? - unix.stackexchange.com/questions/321697/…