4

Я не знаком с расширением переменных в bash. То, что я пытаюсь сделать, это:

У меня есть папка с большим количеством PDF, размер которой я хочу уменьшить. Команда для PDF 'foo.pdf' будет такой:

pdfsizeopt.py foo.pdf foo.pdf

Как сделать это для всех pdf в папке с командой bash?

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

Но pdfsizeopt.py жалуется, что не было pdf.

Там нет имен файлов с пробелами.


РЕДАКТИРОВАТЬ: Спасибо Джону ! Линия работает! Если я помещу это в make-файл, это не так (потому что я понятия не имею о таких вещах):

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

Я получил:

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

1 ответ1

3

Переменная i уже имеет расширение:

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

Отдельно обратите внимание, что, помещая $i в двойные кавычки, такие как "$i" , этот код теперь будет работать для всех типов имен файлов с пробелами, табуляциями или чем-то еще.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .