输出到名称包含特殊字符的文件(bash脚本linux)

2024-09-27 17:59:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为mpeepdf自动化编写一个脚本。 我的脚本包括读取文件文件夹,并运行“for f in FILES”do。。。循环,从每个文件中提取js,还生成json报告,并将这些结果(js文件和json报告)分别输出到单独的文件夹中。 我试图做的是读取不带扩展名的文件名(success),并使用相同的文件名但具有不同扩展名(如.js或.json)将其输出到另一个文件夹。由于某些原因,JSON报告生成成功,但是,由于提取js的命令略有不同,每个包含空格或()或任何其他字符的文件都无法进行糟糕的处理。 我的代码片段:

for f in FILES
do
filename="$(basename "$f")"
reportname="${filename%%.*}.json"
jsoutput="${filename%%.*}.js"
REPORTOUTPUT=/home/parallels/randomfolder/reports/"$reportname"
JSOUTPUT=/home/parallels/randomfolder/extract-js/"$jsoutput"
mpeepdf -flm "$f" -j "$REPORTOUTPUT"
mpeepdf -flm "$f" -C "extract js > '$JSOUTPUT'" /// the problematic part is here. i know this is wrong > explanation below...
done

所以我认为有问题的部分主要与引用有关。要成功读取文件并正确指定报告输出,命令应如下所示:(手动测试,工作正常)

mpeepdf -flm 'file name with spaces and symbols.pdf' -C "extract js > 'file name with spaces and quotes.js'"

我感到困惑,因为将"$f"放在单引号中不会读取文件名(因为里面的所有内容都作为一个字符串读取,而不解释符号)。不过,这似乎不是问题,因为生成json报告时读取和输出文件名的方式是正常的。问题在于extractjs命令。请注意extract js > path必须用引号括起来,否则像这样的命令无法理解该命令-C指定交互式mpeepdf模式下的命令

注意。我对bash脚本和linux没有经验,这是我第一次尝试(失败了,失败了…)。请善待我


Tags: 文件in命令脚本文件夹jsonfor文件名
1条回答
网友
1楼 · 发布于 2024-09-27 17:59:43

也许您应该先构造命令字符串,然后使用eval来执行它,如下所示:

cmd_str='mpeepdf -flm '"'""$f""'"' -C "extract js > '"'""$JSOUTPUT""'"'"'
eval $cmd_str

enter image description here

这对我来说似乎很有用

相关问题 更多 >

    热门问题