Tengo directorios (y subdirectorios) con varios miles de archivos PDF y estaba tratando de reunir el total de páginas de todos esos archivos PDF. Entonces intento ejecutar este comando:
find . -name \*.pdf -exec pdfinfo {} \; | grep Pages > filelist
Y obtengo el número de páginas de cada archivo canalizado al filelist
archivo.
Realmente me gustaría incluir también el nombre del archivo, pero no sé cómo hacerlo ( pdfinfo
devuelve muchos datos sobre el PDF pero no el nombre del archivo en sí).
Respuesta1
Precede -exec
con -print
. De esta manera, el nombre de la ruta se imprimirá find
antes de que el respectivo pdfinfo
imprima su salida. -print
es la acción predeterminada (por ejemplo, cuando ejecuta sole find .
), pero la presencia de -exec
suprime la acción predeterminada.
Si prefiere el nombre de la ruta después de la salida del respectivo pdfinfo
entonces puede intentarlo -exec … -print
, pero en este caso la nota -print
se realizará si -exec
(es decir pdfinfo
) tiene éxito. En general se utiliza -exec … -print
cuando -exec
se utiliza como prueba. En el contexto de su pregunta, personalmente prefiero primero el nombre de la ruta, entonces -print -exec …
.
Entonces necesitas ajustar tu grep
. Utilice el hecho de que cada nombre de ruta considerado por find .
debe comenzar con .
. grep -E '^(\.|Pages)'
coincide con líneas con un punto literal al principio o la cadena Pages
al principio.
El comando final será:
find . -name \*.pdf -print -exec pdfinfo {} \; | grep -E '^(\.|Pages)'
(redirija la salida por su cuenta).
Considere -type f
como primera prueba en caso de alguna irregularidad.archivocoincidencias -name \*.pdf
por casualidad. Esto evitará llamar pdfinfo
a directorios y demás.