我想使用 ps2pdf 压缩目录中的 PDF,但无法设置 for 循环。文件命名不断出现错误。
filelist=$(find . -name \*.pdf)
for i in "$filelist"; do
ps2pdf -dPDFSETTINGS=/ebook "$i"
done
变量用引号引起来是因为文件名包含空格。
如果目录中有一个文件,则脚本有效。如果目录中有多个文件,脚本将返回错误Error: /undefinedfilename in
。
告诉我,可能是什么问题?
当你将其放在
$filelist
引号中时,它就变成了一个单词。因此,循环执行一次,其中循环变量等于找到的整个文件列表。因此出现未定义文件名错误。该怎么办?选项一,
ps2pdf
在里面做find
:选项二,使用
while read
而不是for
。默认情况下,find
逐行返回文件名,而read
一次读取一行。也就是说,在这样的循环中,将逐行处理行,而不是像在循环中那样处理单词for i in words
:选项三:设置
IFS=$'\n'
循环执行时间for i in words
,使得单词被视为换行符之间的部分: