Linux脚本运行另一个需要双引号的命令



我有一个噩梦试图让这个正确运行。我用php代码做得很好,但问题是很多文件命令超时。我以为我可以很容易地做到这一点,通过ssh在盒子本身,但我不能让它做我想要的。

在PHP中,我正在做以下操作:

$command='/usr/bin/convert "'. $LocalPDFURL . '[1]" -quality 70% "' . $LocalJPGURL . '"' ; 

我需要搜索pdf文件,检查他们是否有一个相同的文件名。jpg,如果没有使用pdf的第一页生成jpg。以上在php中工作得很好。但在linux shell脚本它不会工作,无论我已经尝试过。我已经尝试了各种各样的组合,它只是输出整个东西作为字符串或错误,因为它没有传递指定完整文件路径所需的双引号(它们包含空格)。

我的脚本是这样的:
format=*.pdf
wpath=$format
for i in $wpath;
do
if [[ "$i" == "$format" ]]
then
echo "No PDF Files to process!"
else
echo "full file name: $i"
FILE="${i%.pdf}.jpg"
if [ -f "$FILE" ]; then
echo "$FILE exists."
else 
ORIGINAL=""${FILE%.jpg}.pdf""
QFILE=""$FILE%""
echo "$FILE does not exist. Creating PDF Cover JPG!"
command="/usr/bin/convert """$ORIGINAL"" 1 -quality 65% $QFILE 2>&1"
echo $command
fi
fi
done

我只想构建命令并执行它。

php命令输出如下所示:

"/usr/bin/convert "/home/test/1.pdf" 1 -quality 65% "/home/test/1.jpg" 2>&1"

和运行良好。

我试过单引号,双引号转义等等。请帮帮我!

所以我的建议是:

  1. 在bash中创建一个函数,做你想要的(即:给定一个pdf文件,检查相应的jpg文件是否存在,如果不转换它)
  2. 将此功能应用于所有pdf文件
maybe_convert(){
! [ -f "${1%.*}.jpg" ] && echo "/usr/bin/convert "$1" 1 -quality 65% "${1%.*}.jpg"" || echo $1 exists
}
export -f maybe_convert
find . -type f -name "*.pdf" | xargs -I{} bash -c "maybe_convert "{}""

上面的代码片段适用于以下文件结构(假设您已将代码片段保存在名为convert_image.sh的文件中):

$ ls testdir/
'file 1.jpg'  'file 1.pdf'  'file 2.pdf'  'file 3.pdf'
$ bash convert_image.sh
/usr/bin/convert "./testdir/file 3.pdf" 1 -quality 65% "./testdir/file 3.jpg"
/usr/bin/convert "./testdir/file 2.pdf" 1 -quality 65% "./testdir/file 2.jpg"
./testdir/file 1.pdf exists

最新更新