bashでファイル名に半角スペースが含まれたものを処理する

jpg画像を一気にconvertした時につまずいた。

#!/bin/bash

for file in *.jpg

do

    convert $file ${file%.jpg}.png

done

 

エラー文

convert: unable to open image `test': No such file or directory @ error/blob.c/OpenBlob/2617.
convert: no decode delegate for this image format `test' @ error/constitute.c/ReadImage/544.
convert: unable to open image `.jpg': No such file or directory @ error/blob.c/OpenBlob/2617.
convert: no decode delegate for this image format `.jpg' @ error/constitute.c/ReadImage/544.
convert: no images defined `test.png' @ error/convert.c/ConvertImageCommand/3021.

 

どうやら区切り文字を変えてやれば動作するらしい。

行の区切りとする文字を\nだけにする。

()の中に書いているのは、IFSを一時的に使用するため。

#!/bin/bash

(

IFS="$'\n'"

for file in *.jpg

do

    convert $file ${file%.jpg}.png

done

)