Bash: Faça algo com cada PDF na pasta

4

Eu não estou familiarizado com a expansão de variáveis no bash. O que estou tentando fazer é:

Eu tenho uma pasta com muitos PDFs, que eu quero encolher em tamanho. O comando para um PDF 'foo.pdf' seria:

pdfsizeopt.py foo.pdf foo.pdf

Como fazer isso para todo o pdf na pasta com o comando bash?

for i in *.pdf; do pdfsizeopt.py $i.pdf $i.pdf; done

Mas o pdfsizeopt.py reclama, não havia pdf.

Não há nomes de arquivos com espaços.

EDITAR: Graças a John ! A linha funciona! Se eu colocar em um makefile, não (porque não tenho idéia de tais coisas):

compile:
     for i in *.pdf; do pdfsizeopt.py "$i" "$i"; done

Eu recebo:

for i in *.pdf; do pdfsizeopt.py "" ""; done
info: This is pdfsizeopt.py rUNKNOWN size=316003.
info: using Java for Multivalent: /usr/bin/java
info: loading PDF from: 
Traceback (most recent call last):
  File "/home/AW/bin/pdfsizeopt/pdfsizeopt.py", line 7835, in <module>
    main(sys.argv)
  File "/home/AW/bin/pdfsizeopt/pdfsizeopt.py", line 7797, in main
    ).Load(file_name)
  File "/home/AW/bin/pdfsizeopt/pdfsizeopt.py", line 3440, in Load
    f = open(file_data, 'rb')
IOError: [Errno 2] No such file or directory: ''
make: *** [compile] Fehler 1
    
por Keks Dose 07.10.2014 / 07:31

1 resposta

3

A variável i já tem a extensão:

for i in *.pdf; do pdfsizeopt.py "$i" "$i"; done

Separadamente, observe que colocando o $i entre aspas duplas, como "$i" , esse código agora funcionará para todos os nomes de arquivos com espaços, tabulações ou o que for.

    
por 07.10.2014 / 07:37

Tags