2013年11月7日木曜日

ファイルの拡張子の一括変換

ITProの記事を参考にしました。ITProの記事のスクリプトを少しだけ変更して、引数で渡した拡張子を持つファイルの拡張子を一括して特定の拡張子に変換するスクリプトを作成した。


これをch_ext_to_txt.shのような名前で保存して実行権限をchmod +xで付与してパスの通ったディレクトリに移動する。実行方法は、ch_ext_to_txt.sh tex とすると、拡張子がtexのファイルの拡張子をtxtに変換する。

で、これの最大の疑問は、${foo%word}です。大体想像はつくけど調べた。manpageを見ると、以下の説明(日本語)がある。
${parameter%%word}
パターンに後方一致した部分を取り除くword が展開され、パス名展開の場合と同じようなパターンを作ります。 このパターンが parameter を展開した値の末尾の部分とマッチする場合、展開結果は parameter を展開した値から最短一致パターン (``%'' の場合) または最長一致パターン (``%%'' の場合) を取り除いたものになります。 parameter@ または * である場合、 パターンを削除する操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして得られます。 parameter@ または * が添字になっている配列変数である場合、 パターンを削除する操作は配列の全ての要素に順番に適用され、 展開結果はリストとして得られます。
便利ですね。 つまり、parameter で渡した文字列からwordに後方一致した部分を取り除く、ということらしい。だから、${foobar#bar}としたらfooが返される。

シェルスクリプト便利ですね。

0 件のコメント:

コメントを投稿