2020年8月30日日曜日

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連スペースを一つスペースに置換する修正しました)

 

0 件のコメント:

コメントを投稿