微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – BASH中带空格的文件名

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

#! /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).我怎样才能解决这个问题?

解决方法:

首先,你不需要ls.通过在backtics中使用ls,您隐式地将bash解析为一个列表,该列表按空格分割.相反,make bash生成列表并将其分开而没有这样的怪癖:

此外,您需要将所有$i用法括在引号中,以使bash将其替换为整体,而不是将字符串拆分为单独的单词.

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐