ctmconv, zenity e nomes de arquivos com espaços

0

Estou fazendo um pequeno script de conversão no Zenity, mas notei que o ctmconv não permite espaços em um nome de arquivo. Posso me livrar de espaços no nome do arquivo de entrada?

#!/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"

O script acima obtém o arquivo a ser convertido e, em seguida, solicita que o tipo de arquivo seja convertido. Em seguida, ele substitui o tipo de arquivo original pelo novo e passa o resultado para ctmconv. Provavelmente uma maneira bagunçada de fazer isso, mas hey ho! Eu sou novo nisso.

ctmconv simplesmente cai se "$ file" for "model rail", mas está bem se for apenas "model"

    
por user256787 23.06.2016 / 00:34

2 respostas

0

Por alguma razão muito estranha, ctmconv não reconhece as variáveis citadas como uma entidade se seus conteúdos contiverem espaços. (O que também pode valer a pena relatar esse comportamento como um bug para os desenvolvedores).

Sugiro que você use qualquer ferramenta de edição de texto, como sed ou awk , para inserir uma barra invertida antes do espaço. Por exemplo, algo assim.

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

No caso de sua variável, algo como isto será feito:

$ file="with space"
$ file="$( echo $file | sed 's/\ /\ /g'  )"
$ echo "$file"
with\ space
    
por Sergiy Kolodyazhnyy 24.06.2016 / 22:04
0

Não consigo entender os comentários. Não posso postar o código porque é muito longo, não posso fazer o upload. Eu não posso eveng obter uma nova linha sobre isso, então eu tenho que responder minha própria pergunta

#!/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"'

Eu acabei de colocar o echo ctmconv etc., então você não precisa do ctmconv para ver a saída se você executar em um terminal ..

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

ctmconv cai ao tentar enviar o arquivo: a entrada é aceita.

Mas se eu copiar, colar e executar a linha "echo" ed, ela funcionará perfeitamente ....

E se eu pudesse apenas remover os espaços do szSaveFile. Isso poderia ser feito?

    
por user256787 26.06.2016 / 01:09