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

Linux script to run another command which requires double quotes

我正在做一场噩梦,试图将其正确设置为 运行。我使用 php 代码做得很好,但问题是很多文件命令超时。我以为我可以通过盒子本身的 ssh 轻松地做到这一点,但我无法让它做我想做的事。

在 PHP 我正在做以下事情:

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

我需要搜索 pdf 文件,如果没有使用 pdf 的第一页生成 jpg,请检查它们是否具有相同文件名的 .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 -quality 65% \"${1%.*}.jpg\"" || echo  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