ファイル名にある空白の除去は行えるようになったものの、そのスクリプト単体では空白が複数個含まれている場合に対処できないことが判明しました。
本当はファイル名に含まれる空白の個数をカウントして・・・などができると良いのですが、それはまたおいおい考えるとして、ひとまず複数回(指定回数)処理を繰り返すようにすることで仮対応することにします。
一定回数ループさせるにはどうすればいいのか調べてみたところ、for文の「値のリスト」の書き方を工夫することでいけることがわかりました。
リンク先で紹介されていたのは、
#!/bin/sh
for i in `seq 0 9`
do
echo $i;
done
という例文。
よくfor file in `ls`みたいに使っていたfor文のin以下でカウントアップするような命令を入れれば良いようです。
seqコマンドがそれで、これは数字を連番で取り出すコマンドだそう(引数が一つの場合)。このコマンドに二つの引数を与えると、(上記例文ならば)0から9までの連続した数字を取り出していく(そしてそれを変数iに代入する)という命令になります。
これで指定回数(0〜9なら10回ということ)の繰り返しが行える、ということですね。
というわけで。
$ touch “a a.txt”
$ touch “b b b.txt”
$ touch “c c c c.txt”
$ ls -l
合計 0
-rw-rw-r– 1 hoge foo 0 7月 1 07:34 a a.txt
-rw-rw-r– 1 hoge foo 0 7月 1 07:35 b b b.txt
-rw-rw-r– 1 hoge foo 0 7月 1 07:35 c c c c.txt
で複数個の空白を含むいくつかのファイルを作成し、これに繰り返しを加えた空白除去のスクリプトを走らせてみました。
#! /bin/bash
for i in `seq 0 4`; do
find . -name “*.*” | rename \ _ *.*
done
こんな具合でスクリプトを記述。これを実行すると・・・。
$ ls -l
合計 0
-rw-rw-r– 1 hoge foo 0 7月 1 07:34 a_a.txt
-rw-rw-r– 1 hoge foo 0 7月 1 07:35 b_b_b.txt
-rw-rw-r– 1 hoge foo 0 7月 1 07:35 c_c_c_c.txt
という具合に、含まれる空白の数が異なるそれぞれのファイルの空白を全てアンダーバーで置き換えることができていました。
ループの回数を直接に数字で指定するのはあまり美しくありませんが、とりあえず求めていた処理はできているので、まぁそれならそれでいいかと・・・(^ ^;;