ctmconv、zenity 和带空格的文件名

ctmconv、zenity 和带空格的文件名

我正在 Zenity 中编写一个小转换脚本,但注意到 ctmconv 不允许文件名中有空格。我可以去掉输入文件名中的空格吗?

#!/bin/bash
cd ~/Desktop
file="$(zenity --title "3D Converter:         Select a File to convert" --file-selection --file-filter=""*.ctm" "*.ply" "*.stl" "*.3ds" "*.dae" "*.obj" "*.lwo" "*.off"")"
filetype=$(zenity --list --title="Select File Type" --text="file types\ selection" --column="Select" --column="File Type" --radiolist false 3ds false ctm false dae false lwo false obj false off false ply true stl false wrl)
szSavePath="$(zenity --file-selection --filename="${file%%."${file##*.}"}"."$filetype" --save --confirm-overwrite)"
# szSavePath="$(zenity --file-selection --filename="out"."$filetype" --save --confirm-overwrite)"
ctmconv "$file" $szSavePath
zenity --info --text "Conversion Completed"

上述脚本获取要转换的文件,然后要求输入要转换的文件类型。然后,它将原始文件类型替换为新文件类型,并将结果传递给 ctmconv。这样做可能有点麻烦,但没关系!我是新手。

如果“$file”是“model rail”,ctmconv 就会失败,但如果只是“model”,则没问题

答案1

由于某些非常奇怪的原因,ctmconv如果引用的变量的内容包含空格,则不会将其识别为一个实体。(也值得将此行为作为错误报告给开发人员)。

我建议您使用任何文本编辑工具,例如sedawk在空格前插入反斜杠。例如,像这样。

$ echo "with space" | sed 's/\ /\\ /g'                                         
with\ space

如果你的变量,可以这样做:

$ file="with space"
$ file="$( echo $file | sed 's/\ /\\ /g'  )"
$ echo "$file"
with\ space

答案2

我无法掌握评论的窍门。我无法发布代码,因为它太长了,我无法上传它。我甚至无法在上面写一行,所以我必须自己回答我的问题

#!/bin/bash

cd ~/Desktop
file="$(zenity --title "3D Converter:         Select a File to convert" --file-selection --file-filter=""*.ctm" "*.ply" "*.stl" "*.3ds" "*.dae" "*.obj" "*.lwo" "*.off"")"
file="$( echo $file | sed 's/\ /\\ /g'  )"
filetype=$(zenity --list --title="Select File Type" --text="file types\ selection" --column="Select" --column="File Type" --radiolist false 3ds false ctm false dae false lwo false obj false off false ply true stl false wrl)
szSavePath="$(zenity --file-selection --filename="${file%%."${file##*.}"}" --save --confirm-overwrite)"
echo ctmconv $file $szSavePath."$filetype"
ctmconv $file $szSavePath."$filetype"
zenity --info --text "Conversion Completed"`

我只放置了 echo ctmconv 等,因此如果您在终端中执行,则不需要 ctmconv 来查看输出。

ctmconv /home/alistair/Desktop/plastic/Buffers/Model\ Rail.stl /home/alistair/Desktop/Model\ Rail.3ds
Error: Invalid argument: /home/alistair/Desktop/Model\`

ctmconv 尝试输出文件时失败:输入被接受。

但是如果我复制、粘贴并执行“echo”行,它就能完美地运行......

如果我可以从 szSaveFile 中删除空格会怎么样?可以做到吗?

相关内容