如何修复带有破折号或空格的文件名

如何修复带有破折号或空格的文件名

我创建了一个 bash 文件,但是当我将它运行到那些包含“空格”或“-”的文件(或文件夹)时,我的命令不起作用!如何解决这个问题。

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

答案1

使用双引号括住变量以防止单词分裂。

你可以做:

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

请注意,您不需要在里面引用变量,[[因为它是一个 shell 关键字。

另外,您应该在命令替换周围使用双引号,$()因为它们也会受到单词分割的影响。

相关内容