BASH中带有空格的文件名

发布于 2021-02-01 17:58:41

我正在尝试编写脚本,将大照片裁剪并调整为高清壁纸。

#! /bin/bash


for i in `ls *.jpg`
do
    width=`identify -format '%w' $i`
    height=`identify -format '%h' $i`

    if [ `echo "$width/$height > 16/9" | bc -l` ]
    then
        exec `convert $i -resize 1920 -gravity Center -crop '1920x1080+0+0' +repage temp`
    else
        exec `convert $i -resize x1080 -gravity Center -crop 1920x1080+0+0 +repage temp`
    fi

    rm $i
    mv temp $i
done

但是该脚本似乎在文件名中带有空格的问题(例如Tumble Weed.jpg)。我怎样才能解决这个问题?

关注者
0
被浏览
91
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    首先,您不需要ls。通过ls在backtics中使用,您可以使bash隐式地将字符串解析为一个列表,该列表按空格分隔。而是让bash生成列表并将其分离,而无需进行此类怪癖:

    另外,您需要将所有$i用法都括在引号中,以使bash整体上替代它,而不是将字符串拆分成多个单独的单词。

    这是演示两种想法的脚本:

    for i in *.jpg ; do 
      echo "$i";
    done
    


推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看