bash ファイル名に半角スペースが入っているファイル一覧の取得
シュルはループをしなくても下記の例のように、ファイル一覧から、ファイル名をパラメーターにして、自分のプログラムに渡して順番に実行することができます。まあ、一番いい方法かどうかは置いといて、やりたいことができるならわるくないとは思います。
#!/bin/bash
TD=/tmp/all2mp4-$$
ls -l ~/myfiles/*.anyext | awk '{print "bash ~/myprogram.sh " gsub(/ /,"\\ ",$9)}'> $TD
bash $TD
sleep 1
rm $TD
しかし、ファイル名にスペースが入っている場合、上記のawkからちゃんとファイルを取得することができなかったので、下記に書き直しました。それから、自分のプログラムに渡した場合、スペースを¥(バックスラッシュ)でエスケープしないとちゃんとパラメーターとして渡せない点を注意する必要がありますね。
#!/bin/bash
TD=/tmp/all2mp4-$$
ls -l ~/myfiles/*.anyext | awk '{tmp=$1;for (i = 2; i <= 8; i++) tmp=tmp " " $i;gsub(" "," ",$0);gsub(tmp " ","",$0); gsub(" ","\\ ",$0); print "bash ~/myprogram.sh " $0}'> $TD
bash $TD
sleep 1
rm $TD
【註】$$ 実行されたシェル自身のプロセスIDです。
(日付が一桁のとき、2連スペースになるため、2連スペースを一つスペースに置換する修正しました)
コメント
コメントを投稿