空白で区切られたファイル名をひとまとまりのファイル名として読み込めるようになったので、続いてそのファイルの空白を除去していきます。これは普通にsedでいけそうな感じ。
sed ‘s/ //g’
実際のところ、これでいけました。最後のgは条件に一致する全ての箇所にこのsedを適用させるオプションだそう。これがないと、複数箇所の空白に対処できないってことですね。
ただしこれだと半角スペースにしか対応できないので、念の為次のようにして全角スペースにも対応するようにしました。
#!/bin/bash
dir=`pwd`
OLDIFS=$IFS
IFS=
files=`ls $dir`
for file in $files; do
newfile=`echo “$file” | sed ‘s/ //g’ | sed ‘s/ //g’`
echo “$newfile”
done
IFS=$OLDIFS
「OLDIFS=$IFS」で初期値のIFS(スペースと改行とタブが指定されているらしい)を確保しておき、「IFS=」で初期値を全てクリアしてしまいます。
その上で変数fileにls $dirの値を放り込めば、空白を含むファイル名が分割されずにそのまま一つのファイル名として読み込まれ、そのファイル名から半角スペースと全角スペースとの全てを取り除き、最後にスペースが取り除かれたファイル名を表示できます。
最後にIFSをデフォルトに戻しておきます。
実際にスクリプトを走らせてみたところ、これで半角スペースも全角スペースもファイル名から取り除いた状態で表示できることがわかりました。
さて、次の問題はこの空白を取り除いたファイル名で空白を含んだファイル名を置き換える方法・・・ですね〜。まだ道半ばかな?