パス名展開

パス名展開とはカレントディレクトリ等のディレクトリ上に存在する複数のファイルのうち、一定規則のファイル名のファイルを一括してコマンドの引数に付けたい場合に使用する機能になります。


後に触れる予定の繰り返しの処理のfor文等でよく使用します。


はじめに0文字以上の任意の文字列にマッチさせる * について触れます。


サンプルコードとして、カレントディレクトリ(現在いるディレクトリ)で拡張子がtxtのファイルのみを出力するコマンドを見てみます。

$ ls *.txt

hello.txtやhoge.txt等、ファイル名の文字数に関係なく出力されます。




次に任意の1文字にマッチさせる ? について触れます。


サンプルコードとして、拡張子を除くファイル名が4文字のファイルのみを出力するコマンドを見てみます。

$ ls ????.txt

?を4個並べることで、4文字に対応という意味になります。

この場合、hoge.txtは出力されますが、hello.txtは出力されません。




次に指定した一文字にマッチさせる展開について触れます。

例えば、file1.txtは出力したいが、files.txtは出力したくないといった時に利用します。

$ ls file[1-9].txt

[1-9]と数字をハイフンでつなぐことで、1から9までの数字のどれかになります。


もし、file1.txtとfile2.txtのみを出力したい場合は、

$ ls file[12].txt

のようにハイフンで繋がずに出力させたい数字のみを入れます。


文字列の場合は[a-z]や[A-Z]のように指定します。


[!12]とすることで、1と2を除くすべてといった指定の仕方もあります。




次にブレース展開について触れます。

ブレース展開はたくさんあるファイルの中から任意の複数のファイルを選択する方法で、

$ ls {hello,hoge}.txt

のようにして実行します。


この場合、hello.txtとhoge.txtの2ファイルのみ出力し、他の同じ拡張子のファイルは出力されません。


ブレース展開をする上での注意点は存在していないファイル名等を{}に加えるとエラーになります。




最後にチルダ展開について触れます。

チルダとは ~ で、ホームディレクトリを指します。

$ echo ~

をすると、

/home/pi

のような出力になります。

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。