読者です 読者をやめる 読者になる 読者になる

argius note

プログラミング関連

開発しています



ファイルグロブのワイルドカード

Unix-like

こういうの、あるのは知ってたけど、今まで * ? くらいしか使ってませんでした。でも、知ってると使えるので、これからは使います。

*:任意の(0個以上の)文字
?:任意の1文字
[]:文字集合(正規表現に似ている)
  [0-9] 0から9が1文字
  [^0-9] 0から9以外が1文字
{}:OR集合(?)
  {a,b,cc} a または b または cc

いくつか例を。


main.cファイルとmain.c.origファイルがあって、diffを取る場合、このワイルドカードひとつで指定できます。

diff main.c{.orig,}
↓(展開)
diff main.c.orig main.c

これは、JF: Linux Kernel 2.6 Documentation: SubmittingPatcheshttp://d.hatena.ne.jp/shiumachi/20090205/1233784493 経由)を参考にしました。


最近あったのは、数値が0〜4のものだけを移動するというもの。サイズが巨大だったので、敢えて分けて実行しましたが、一度にやりたい場合は、このようにします。

mv 00[0-4]??.log dst/

00000〜00499までをdst/に移動します。00500以降はそのままになります。
mvは、最後がディレクトリの場合は、それ以前をすべて最後のディレクトリに移動するようになっているので、これができます。


2つ必要なところに3つ渡すようにしてはダメです。いくらでも(上限の許す限り)パラメータを指定できる場合に有効です。
あと、{}だけは存在するファイルが無くても展開します。他のはそのワイルドカードが示すファイルがひとつも無いときは展開されません。