Linux のパスを展開する glob

ファイルやディレクトリを操作するときに "*" や "?" などのワイルドカードを使いますが これが何によって定義されているのかを 考えたことがありませんでした。

これ、 Linux では glob という名前だそうです。

[参考]
Dev Basics/Keyword:glob(グロブ) - @IT

記事を読んで驚いたのが Linux では文字クラス([0-9a-z]みたいなやつ)も使えるとのこと。 Windows のコマンドプロンプトでは使えないため ワイルドカードだけだと思い込んでました。

$ ls -1 /var/log/vsftpd.log*

/var/log/vsftpd.log
/var/log/vsftpd.log.1
/var/log/vsftpd.log.2
/var/log/vsftpd.log.3
/var/log/vsftpd.log.4

$ ls -1 /var/log/vsftpd.log.?

/var/log/vsftpd.log.1
/var/log/vsftpd.log.2
/var/log/vsftpd.log.3
/var/log/vsftpd.log.4

$ ls -1 /var/log/vsftpd.log.[2-3]

/var/log/vsftpd.log.2
/var/log/vsftpd.log.3

$ ls -1 /var/log/vsftpd.log.[^3-5]

/var/log/vsftpd.log.1
/var/log/vsftpd.log.2

うーん、これは便利。

こういうのは当たり前過ぎて、 知ってる人は「他の人も知ってる」と思って わざわざ伝えないものなのかもしれないですね。

ちなみに、ファイルをコピーするときによく使う {} の展開も glob の仕事だそうです。

$ ls -1 /var/log/syslog*

/var/log/syslog

$ cp -p /var/log/syslog{,.keep}

$ ls -1 /var/log/syslog*

/var/log/syslog
/var/log/syslog.keep

[参考]
用語集:ファイルグロブ: UNIX/Linuxの部屋

Google サイト内検索

Amazonアソシエイト