como corrigir nomes de arquivos com traço ou espaço

1

Eu criei um arquivo bash, mas quando eu o executo nesses arquivos (ou pastas) que eles têm "espaço" ou "-", meu comando não funciona! como corrigir esse problema.

   #!/bin/bash
    dpi=$(zenity --entry --text "DPI" --entry-text "72")
    width=$(zenity --entry --text "Width (feet)")
    height=$(zenity --entry --text "Height (feet)")
    w=$(echo "scale=2;($width*12*$dpi);"|bc)
    h=$(echo "scale=2;($height*12*$dpi);"|bc)
    g="$w""x""$h"
    FILES=($(zenity --file-selection --multiple --file-filter=""*.jpg" "*.JPG" "*.jpeg" "*.png" "*.PNG"" --title "Pick a file"))
   for file in "$FILES"
     do
       convert -units PixelsPerInch -density "$dpi"x"$dpi" -geometry "$g"! -quality 100 "$file" "$file"."JPG"

     done
    
por Deniz 07.12.2015 / 08:39

1 resposta

1

Use aspas duplas em torno das variáveis para impedir a divisão de palavras.

Você pode fazer:

for file in "${FILES[@]}"; do
    if [[ $file == /* ]] && [[ -f $file ]]; then
       convert -units PixelsPerInch -density "${dpi}"x"$dpi" \
                      -geometry "$g"! -quality 100 "$file" "$file"."JPG"
    fi
done

Note que você não precisa citar variáveis dentro de [[ , pois é uma palavra-chave do shell.

Além disso, você deve usar aspas duplas em torno da substituição de comandos $() , pois elas também sofrem com a divisão de palavras.

    
por heemayl 07.12.2015 / 08:52