Я делаю немного сценария преобразования в 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. Вероятно, грязный способ сделать это, но эй ho! Я плохо знаком с этим.
ctmconv просто падает, если "$file" является "образцовой направляющей", но прекрасен, если это - просто "модель"
По некоторой очень нечетной причине, ctmconv
не распознает заключенные в кавычки переменные как один объект, если их содержание содержит пробелы. (Который может также быть стоящим для создания отчетов об этом поведении как об ошибке разработчикам).
я предлагаю, чтобы Вы использовали любой инструмент редактирования текста, такой как sed
или awk
для вставки обратной косой черты перед пространством. Например, что-то вроде этого.
$ echo "with space" | sed 's/\ /\\ /g'
with\ space
В случае Вашей переменной, что-то вроде этого сделает:
$ file="with space"
$ file="$( echo $file | sed 's/\ /\\ /g' )"
$ echo "$file"
with\ space
Я не могу приобрести навык комментария. Я не могу отправить код, поскольку это слишком длинно, я не могу загрузить его. Я не могу eveng получать новую строку на нем, таким образом, я должен ответить на свой собственный вопрос
#!/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"`
, я просто поместил эхо 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 падает, пытаясь произвести файл: вход принят.
, Но если я копирую, вставьте и выполните строку редактора "эха", она работает отлично....
, Что, если я мог бы просто удалить пробелы из szSaveFile. Это могло быть сделано?