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. Вероятно, грязный способ сделать это, но эй ho! Я плохо знаком с этим.

ctmconv просто падает, если "$file" является "образцовой направляющей", но прекрасен, если это - просто "модель"

0
задан 23 June 2016 в 01:34

2 ответа

По некоторой очень нечетной причине, ctmconv не распознает заключенные в кавычки переменные как один объект, если их содержание содержит пробелы. (Который может также быть стоящим для создания отчетов об этом поведении как об ошибке разработчикам).

я предлагаю, чтобы Вы использовали любой инструмент редактирования текста, такой как sed или awk для вставки обратной косой черты перед пространством. Например, что-то вроде этого.

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

В случае Вашей переменной, что-то вроде этого сделает:

$ file="with space"
$ file="$( echo $file | sed 's/\ /\\ /g'  )"
$ echo "$file"
with\ space
0
ответ дан 29 September 2019 в 01:36

Я не могу приобрести навык комментария. Я не могу отправить код, поскольку это слишком длинно, я не могу загрузить его. Я не могу 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. Это могло быть сделано?

0
ответ дан 29 September 2019 в 01:36

Другие вопросы по тегам:

Похожие вопросы: