青ポスの部屋

旅と技術とポエムのブログ

【bash】ワイルドカードが使えないコマンドでワイルドカードを使う

ワイルドカードとは、複数のファイルを一気に指定するのに使う記号で、たとえば任意の文字列を表す「*」や任意の1文字を表す「?」が代表的だ。たとえばカレントディレクトリのjpgファイルをpictureというディレクトリへ移動するときは、次のようにする。

mv *.jpg picture

しかし一部のコマンドではワイルドカードを使うことができない。たとえばlameやps2pdfではワイルドカードは使えない。「カレントディレクトリのmp3ファイルをすべてデコードする」といった場合は困る。

こういうときは、doループで処理することができる。doループをワンライナーで使う方法は以前紹介した。

 これとバッククオート(囲った内部のコマンドの結果を表す)を用いて次のようにすれば、lsとワイルドカードで指定したカレントディレクトリ下のファイルを処理することができる。

for file in `ls *.mp3` ; do lame --decode $file ; done

これを改行してスクリプトとして書くと以下のようになる。

for file in `ls *.mp3`
do
lame --decode $file
done