我不熟悉 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"
,此代码现在可以适用于所有带有空格、制表符或其他内容的文件名。