関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。結構知らない人が周りに多かったので、ついでにここにメモメモ。。。
Bashさんには、拡張GLOB (extglob) という設定があります。これをONにすると、通常のGLOB機能を拡張してくれて、追加でいろんなパターンが指定できるようになります。
有効にするには、以下のようにします。
shopt -s extglob
利用例
個人的にたまに利用するのが以下のようなときです。
例えば、どこかのディレクトリにいろいろファイルとかディレクトリが存在しているとします。
$ ls
a.txt app.log app_20260212.zip app_20260213.log b.txt old/
ごちゃごちゃしてるので、一旦 archives ってディレクトリ作成して、そこの下に mv させて綺麗にしてしまいたい。
そういうときに、拡張GLOBさんを利用すると以下のように出来ます。
# 置き場所作る $ mkdir archives # 移動前。移動先となるarchivesも同じディレクトリにいる。 $ ls a.txt app.log app_20260212.zip app_20260213.log archives/ b.txt old/ # 拡張GLOBを使って、「archives以外はarchivesに移動」と実行 $ shopt -s extglob $ mv !(archives) archives # archives以外はarchvesに移動した $ ls archives/ $ ls archives/ a.txt app.log app_20260212.zip app_20260213.log b.txt old/ # 拡張GLOBをオフ $ shopt -u extglob
mv !(archives) archives
としている部分がミソで、!(archives) が拡張GLOBです。!(..) はパターンに合致するもの「以外」にマッチします。
なので、上のコマンドは「archives以外はarchivesに移動」という意味になります。
通常、こんな感じで同じディレクトリ内にアーカイブディレクトリとかを作って全ファイル移動させる場合は、アーカイブディレクトリ自身が含まれないように find コマンドなどで除外して実行したりすることが多いですが、拡張GLOB使うと楽です。
ちなみに、拡張GLOB機能は Bash 固有の機能ですので、他のシェルには同等の機能がないかもしれません。
Bashのバージョン v4 以降から利用可能なので、今の時代であればほぼ使えますね。
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。