Bash:对文件夹中的每个 PDF 执行某些操作

Bash:对文件夹中的每个 PDF 执行某些操作

我不熟悉 bash 中变量的扩展。我想做的是:

我有一个包含大量 PDF 的文件夹,我想缩小其大小。PDF“foo.pdf”的命令如下:

pdfsizeopt.py foo.pdf foo.pdf

如何使用 bash 命令对文件夹中的所有 pdf 执行此操作?

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

但是 pdfsizeopt.py 抱怨说,没有 pdf。

没有带空格的文件名。


编辑:感谢约翰!这行代码有效!如果我把它放入 makefile 中,它却无效(因为我不知道这些事情):

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

该变量i中已经有扩展名:

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

另外,请注意,通过将 放在$i双引号中,例如"$i",此代码现在可以适用于所有带有空格、制表符或其他内容的文件名。

相关内容