Linux - script no encuentra número de páginas en archivo PDF

 
Vista:

script no encuentra número de páginas en archivo PDF

Publicado por juan gonzalez (3 intervenciones) el 28/02/2019 03:14:55
Hola a todos y gracias de antemano.
Mi problema es el siguiente: En el terminal de linux, con el comando find hago un archivo (lista-PDF.txt) con la lista de archivos PDF de una carpeta (más de 7 mil, son de una biblioteca de investigadores...).
Hice un script que usando la herramienta pdftk busca los archivos con menos de 40 páginas y los copia a otra carpeta. Sin embargo se detiene en los primeros archivos y después no hace nada. Les adjunto un pedazo del archivo lista-PDF.txt para que se aprecie su estructura y por supuesto el script.

Gracias.

SCRIPT:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
 
#limpia pantalla
clear
 
# verifica si el usuario es root
if [ "$(whoami)" != 'root' ];
then
 echo "Es necesario ejecutar este script como root."
 exit 1;
fi
 
# calcula cant, la cantidad de líneas del archivo lista-PDF.txt
	cant=`wc -l lista-PDF.txt | cut -d " " -f 1`
 
# se procesa línea por línea el archivo lista-PDF.txt
i=1
while (test ${i} -le ${cant});
do
f=`sed -n "$i"p lista-PDF.txt`	#se obtiene la línea número i
 
# se obtiene el número de páginas, k, para el archivo con ruta f
# pdftk es una herramienta para manejar archivos PDF
 
	k=`pdftk $f dump_data output | grep -i NumberOfPages | cut -d " " -f 2`
		if [ $k -le 40 ];	# que tenga menos de 40 pág
		then
		  cp $f /home/kiko/Escritorio/artic-PDF/
		 exit 1;
		fi
i=`expr $i + 1`
done

Trozo del archivo lista-PDF.txt

... ... ...

./libros-CARPETA-7/BADIOU_condiciones.pdf
./libros-CARPETA-7/BADIOU_el-siglo.pdf
./libros-CARPETA-7/BADIOU_filosofia-del-presente.pdf
./libros-CARPETA-7/BADIOU_la-etica_a.pdf
./libros-CARPETA-7/BADIOU_la-etica_b.pdf
./libros-CARPETA-7/LIBROS-investigar/Caminos.pdf
./libros-CARPETA-7/LIBROS-investigar/Historias-de-Colombia.pdf
./libros-CARPETA-7/LIBROS-compas/la-etnografia-hoy.pdf
./libros-CARPETA-7/libros-INSUM/Crisis de representacion.pdf
./libros-CARPETA-7/libros-INSUM/critica de la razon indolente - boaventura de sousa santos.pdf

... ... ...

Gracias una vez más...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 311
Oro
Ha mantenido su posición en Linux (en relación al último mes)
Gráfica de Linux

script no encuentra número de páginas en archivo PDF

Publicado por xve (837 intervenciones) el 28/02/2019 08:29:27
Hola Juan, creo que te has liado mas de la cuenta con el tema de las lineas del archivo... haber si te sirve este simple código de ejemplo...

1
2
3
4
5
6
#!/bin/bash
 
while read p; do
    paginas=`/usr/bin/pdftk "$p" dump_data output | grep -i NumberOfPages | cut -d " " -f 2`
    echo "$p - $paginas paginas"
done <lista-PDF.txt

Sobre tu problema, puede ser que te falte añadirle las comillas al nombre del archivo en el pdftk?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

script no encuentra número de páginas en archivo PDF

Publicado por Tom (482 intervenciones) el 28/02/2019 12:04:05
Quizás tu bucle falle, xve, si los ficheros de la lista contienen espacios en blanco.
Habría que probar, pero creo que sería mejor algo como esto para el for:

1
2
3
4
while p=`line`
do
  ...
done <lista-PDF.txt
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de xve
Val: 311
Oro
Ha mantenido su posición en Linux (en relación al último mes)
Gráfica de Linux

script no encuentra número de páginas en archivo PDF

Publicado por xve (837 intervenciones) el 28/02/2019 13:35:41
Si, cierto... tienes razón Tom!!!

Gracias por comentarlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

gracias amigos, pero...

Publicado por juan gonzalez (3 intervenciones) el 06/03/2019 04:18:29
Gracias amigos por sus respuestas, pero...
Recogiendo la sugerencia sobre los espacios en blanco, puse en el archivo lista-PDF un escape antes de cada espacio: \
Sin embargo esto no resolvió el problema.
Lo más raro es que cuando en el terminal aplico el comando sed manualmente, por ejemplo, asignando el número 284 para i, (es decir hago i = 284) funciona bien y entrega la dirección completa.
También funciona bien cuando coloco la dirección del archivo manualmente en la herramienta pdftk (corregida con los escapes).
La probé para muchas líneas manualmente.

Sin embargo cuando corro el script, no pasa nada... En verdad no entiendo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¡¡¡ SOLUCIONADO !!!

Publicado por juan gonzalez (3 intervenciones) el 20/03/2019 04:27:52
Hola a todos.
Solucioné el problema. Para ello utilicé las sugerencias de quienes me respondieron, por tanto agradecido de verdad...

Nota 1: el archivo "lista-PDF" con la lista de libros tiene los espacios con un escape antes.

Nota 2: Obviamente la línea
echo "$p - $paginas - páginas"
sólo sirve para que vaya mostrando el proceso y no es indispensable.

Nota 3: La segunda línea del script
# -*- ENCODING: UTF-8 -*-
sirve para que no tenga problemas con las vocales acentuadas y otros caracteres complicados.

El script definitivo es este:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
 
#limpia pantalla
clear
 
# verifica si el usuario es root
if [ "$(whoami)" != 'root' ];
then
 echo "Es necesario ejecutar este script como root."
 exit 1;
fi
 
while read p; do
    paginas=`/usr/bin/pdftk "$p" dump_data output | grep -i NumberOfPages | cut -d " " -f 2`
    echo "$p - $paginas - páginas"
 
if [ $paginas -le 40 ];	# se compara para que sea menor que 40
then
	 cp "$p" /ruta-carpeta-donde-van-los-libros-de-menos-de-40-paginas/
fi
 
done <lista-PDF.txt


Ya con este script puedo ordenar los libros por la cantidad de páginas que tienen.... Además quedó más simple.
GRACIAS :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 311
Oro
Ha mantenido su posición en Linux (en relación al último mes)
Gráfica de Linux

¡¡¡ SOLUCIONADO !!!

Publicado por xve (837 intervenciones) el 20/03/2019 10:13:34
Gracias por compartirlo Juan!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar