¿Cómo combinar varios archivos pdf según la ubicación y el nombre con la línea de comando?

Tengo varias carpetas con esta estructura:

Nombre de carpeta/tmp

Otro nombre de carpeta/tmp

etcétera...

Dentro de la carpeta tmp tengo muchos archivos pdf con este patrón de nombre:

pdf-nombre-1.pdf pdf-nombre-2.pdf .... y más

Estoy buscando la manera de unir todos los archivos pdf dentro de todos los directorios tmp con esta estructura de nombre, mover los archivos PDF originales a la papelera y cambiar el nombre del pdf combinado con pdf-name.pdf

¿Hay alguna forma de hacerlo usando la línea de comandos o el script bash en macOS?

Que tú mucho.

ACTUALIZACIÓN PARA ACLARACIÓN

Necesito combinar todos los archivos PDF dentro de su propia carpeta tmp, no todos los archivos PDF dentro de TODAS las carpetas tmp.

Respuestas (2)

Aunque solicitó específicamente el script bash, pero como respuesta complementaria, podría considerar usar el script de python a continuación. Curiosamente, una parte del proyecto python (Ipython) fue diseñada específicamente para reemplazar bash .

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))

Lo que exige este programa es codificar las rutas que contienen las subcarpetas /tmp. Eso también se puede automatizar según la cantidad de automatización que desee. No recomendaré eliminar los archivos PDF originales a menos que ocupen demasiado espacio.

ACTUALIZACIÓN : busca todas las subcarpetas que tengan el nombre 'tmp' en el directorio de trabajo actual y combina todos los archivos pdf dentro de cada una de las carpetas tmp.

Gracias por su respuesta. Hay más de 1000 carpetas tmp, por lo que necesito un script automatizado. Gracias de nuevo por tu ayuda.
@Jose: Edité mi respuesta. Esto ahora también funciona para la búsqueda automática de carpetas tmp
Gracias, necesito combinar todos los archivos PDF dentro de su propia carpeta tmp, no todos los archivos PDF dentro de TODAS las carpetas tmp. Ya actualicé la descripción de la pregunta...
@Jose, actualizó el código para reflejar sus requisitos "actualizados". Si funciona, ¿podrías aceptar mi respuesta amablemente?
Gracias. Parece que el script funciona pero insertó algunas páginas en blanco en un archivo pdf combinado. Por cierto, ¿hay algún truco para combinar solo ciertos archivos basados ​​en el nombre? Gracias.
@Jose: No me agrega ninguna página en blanco. Puede ser que algunos de sus archivos PDF estén en blanco. ¿Podrías comprobar eso? Por supuesto, puede seleccionar ciertos archivos pdf editando la línea en el script: if file.endswith(".pdf"):a if file.endswith(".pdf") and 'name' in fileo algo así, según sus requisitos.

Aparentemente /System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.pyes una herramienta nativa en Mac para combinar múltiples archivos PDF. Si eso no hace lo que desea, deberá instalar algún software adicional para manejar esa parte. Mire Imagemagick , Graphicsmagick o pdfjam para eso. Estoy seguro de que hay muchos otros.

Para la parte del guión, puede hacerlo todo con una sola línea (aquí se muestra dividido por simplicidad, pero puede ponerlo todo en una sola línea):

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

Reemplace some_pdf_combiner_toolcon el nombre de cualquier herramienta que haya elegido arriba.

Recomiendo probar esto a fondo para asegurarse de que la combinación funcionó antes de eliminar los archivos pdf originales.

Tenga en cuenta también que rmdesde la Terminal solo se eliminarán los archivos directamente, no se colocarán en la Papelera para una posible recuperación posterior. Si eliminarlos desde la línea de comandos es importante para usted, consulte ¿ Cómo mover archivos a la papelera desde la línea de comandos?

Aquí hay una aplicación nativa de macOS que se unirá a pdfs- /System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py
Votó a favor por Destacar el problema de rm vs trash.
Gracias por su respuesta, pero este comando combina todos los archivos PDF dentro de cualquier carpeta tmp en un archivo PDF y necesito combinar los archivos PDF dentro de su propia carpeta tmp.
OK @jose, edité la publicación para combinar archivos PDF dentro de cada carpeta tmp.
¿Por qué es una mala práctica recorrer la salida de find? - unix.stackexchange.com/questions/321697/…