[Linux] globコマンドの使い方 – ファイルのパターンマッチング検索

Linuxでの glob は、シェルやプログラム内でファイル名のパターンマッチングを行うための機能です。

特定のコマンドとして存在するわけではなく、ワイルドカードを使ったファイル検索を指します。

例えば、*は任意の文字列、?は任意の1文字、[abc]はa, b, cのいずれかにマッチします。

これにより、ls *.txtのように特定の拡張子を持つファイルを検索したり、rm file?.txtで特定のパターンに一致するファイルを削除できます。

この記事でわかること
  • globの基本的な使い方
  • ワイルドカードの種類と使い方
  • 応用例による活用方法
  • globの制限と注意点
  • より効率的なファイル操作の方法

目次から探す

globとは何か

globは、シェルやプログラミング言語において、ファイル名やパスのパターンマッチングを行うための機能です。

特定の文字列を含むファイルやディレクトリを簡単に検索することができ、ワイルドカードを使用して柔軟な検索が可能です。

例えば、アスタリスク*を使うことで任意の文字列にマッチさせたり、クエスチョンマーク?を使って特定の位置に任意の1文字を指定したりできます。

これにより、ユーザーは大量のファイルの中から必要なものを迅速に見つけ出すことができ、作業の効率を大幅に向上させることができます。

globは、LinuxやUnix系のシェル環境で広く利用されており、Bashスクリプトやコマンドライン操作において非常に便利なツールです。

globで使用できるワイルドカード

globでは、さまざまなワイルドカードを使用してファイル名やパスをパターンマッチングすることができます。

以下に代表的なワイルドカードの使い方を説明します。

アスタリスク(*)の使い方

アスタリスクは、任意の文字列(0文字以上)にマッチします。

これにより、特定のパターンに合致するすべてのファイルを検索できます。

例:*.txtは、拡張子が.txtのすべてのファイルにマッチします。

クエスチョンマーク(?)の使い方

クエスチョンマークは、任意の1文字にマッチします。

特定の位置に1文字だけを指定したい場合に便利です。

例:file?.txtは、file1.txtfileA.txtなど、fileの後に1文字が続くファイルにマッチします。

角括弧([])の使い方

角括弧は、指定した文字のいずれか1文字にマッチします。

複数の選択肢から1文字を選ぶ場合に使用します。

例:file[1-3].txtは、file1.txtfile2.txtfile3.txtにマッチします。

波括弧({})の使い方

波括弧は、複数の選択肢を指定するために使用します。

カンマで区切った複数のパターンを一度に指定できます。

例:file{1,2,3}.txtは、file1.txtfile2.txtfile3.txtにマッチします。

否定(!)の使い方

否定は、指定した文字以外の任意の1文字にマッチします。

特定の文字を除外したい場合に便利です。

例:file[!1].txtは、file2.txtfile3.txtなど、fileの後に1以外の文字が続くファイルにマッチします。

globの基本的な使い方

globを使用することで、ファイル名やパスのパターンマッチングを簡単に行うことができます。

以下に、基本的な使い方をいくつか紹介します。

ファイル名のパターンマッチング

globを使って、特定のパターンに合致するファイル名を検索できます。

例えば、*.jpgと指定すると、現在のディレクトリ内のすべてのJPEG画像ファイルを取得できます。

# 例: 現在のディレクトリ内のJPEGファイルを表示
ls *.jpg
image1.jpg
image2.jpg

ディレクトリ内のファイル検索

特定のディレクトリ内でファイルを検索することも可能です。

ディレクトリ名を指定し、ワイルドカードを使って検索します。

# 例: /path/to/directory内のすべてのテキストファイルを表示
ls /path/to/directory/*.txt
document1.txt
notes.txt

拡張子を指定したファイル検索

特定の拡張子を持つファイルを検索する際にもglobが役立ちます。

例えば、.pdfファイルを検索する場合は、*.pdfと指定します。

# 例: 現在のディレクトリ内のPDFファイルを表示
ls *.pdf
report.pdf
presentation.pdf

特定の文字列を含むファイルの検索

ファイル名に特定の文字列を含むファイルを検索することもできます。

例えば、*report*と指定すると、reportという文字列を含むすべてのファイルが対象になります。

# 例: 現在のディレクトリ内のファイル名に'report'を含むファイルを表示
ls *report*
annual_report.txt
sales_report.pdf

globの応用例

globは基本的な使い方だけでなく、さまざまな応用が可能です。

以下に、いくつかの応用例を紹介します。

複数のパターンを同時に検索する

複数のパターンを同時に検索することができます。

波括弧を使って、複数の選択肢を指定します。

# 例: 現在のディレクトリ内のJPEGとPNGファイルを表示
ls *.{jpg,png}
image1.jpg
image2.png

特定のディレクトリを再帰的に検索する

findコマンドを使用して、特定のディレクトリ内を再帰的に検索することができます。

globと組み合わせて使用することが可能です。

# 例: /path/to/directory内のすべてのテキストファイルを再帰的に表示
find /path/to/directory -name "*.txt"
/path/to/directory/file1.txt
/path/to/directory/subdir/file2.txt

ファイル名の一部を置き換える

globを使って、特定のパターンにマッチするファイル名の一部を置き換えることができます。

renameコマンドを使用します。

# 例: 現在のディレクトリ内のすべてのテキストファイルの拡張子を.txtから.mdに変更
rename 's/\.txt$/.md/' *.txt
# 変更後のファイル名
document1.md
notes.md

特定のファイルを除外して検索する

特定のファイルを除外して検索する場合、否定を使って指定します。

これにより、特定の条件に合致しないファイルを取得できます。

# 例: 現在のディレクトリ内のすべてのファイルを表示し、file1.txtを除外
ls !(*file1.txt)
file2.txt
file3.txt

ファイルの一括削除や移動にglobを活用する

globを使用して、特定のパターンにマッチするファイルを一括で削除したり移動したりすることができます。

# 例: 現在のディレクトリ内のすべてのバックアップファイルを削除
rm *.bak
# 例: 現在のディレクトリ内のすべてのログファイルを別のディレクトリに移動
mv *.log /path/to/backup_directory/
# 削除されたファイル
backup1.bak
backup2.bak
# 移動されたファイル
log1.log
log2.log

globの制限と注意点

globを使用する際には、いくつかの制限や注意点があります。

以下にそれらを詳しく説明します。

隠しファイルの扱い

LinuxやUnix系のシステムでは、ドット.で始まるファイル名は隠しファイルと見なされます。

globを使用しても、デフォルトでは隠しファイルは対象になりません。

隠しファイルを検索するには、明示的に指定する必要があります。

# 例: 隠しファイルを含むすべてのファイルを表示
ls -a
.  ..  .hiddenfile  regularfile.txt

シェルの設定による挙動の違い

シェルの設定やバージョンによって、globの挙動が異なる場合があります。

特に、nullglobfailglobといったオプションが有効になっていると、パターンにマッチするファイルがない場合の挙動が変わります。

これらのオプションを確認し、必要に応じて設定を変更することが重要です。

# 例: nullglobを有効にする
shopt -s nullglob

ファイル名に特殊文字が含まれる場合の対処法

ファイル名にスペースや特殊文字(例:*, ?, [など)が含まれている場合、globは正しく動作しないことがあります。

このような場合は、クオートで囲むか、エスケープする必要があります。

# 例: スペースを含むファイル名を扱う
ls "file with space.txt"
# または
ls file\ with\ space.txt
file with space.txt

大文字・小文字の区別

globはデフォルトで大文字と小文字を区別します。

つまり、*.txtfile.txtにはマッチしますが、FILE.TXTにはマッチしません。

大文字・小文字を区別せずに検索したい場合は、shopt -s nocaseglobを使用して設定を変更することができます。

# 例: 大文字・小文字を区別せずに検索
shopt -s nocaseglob
ls *.txt
file.txt
FILE.TXT

よくある質問

globと正規表現はどう違うのか?

globと正規表現は、どちらもパターンマッチングを行うための手法ですが、使用する場面や機能に違いがあります。

globは主にファイル名やパスのマッチングに特化しており、シンプルなワイルドカード(*, ?, []など)を使用します。

一方、正規表現はより複雑なパターンを表現でき、文字列の検索や置換など、幅広い用途に利用されます。

正規表現は、特定の文字列のパターンを詳細に指定できるため、より強力ですが、学習コストが高いことがあります。

globで隠しファイルを検索するには?

隠しファイルは、ドット.で始まるファイル名を持つファイルです。

globを使用して隠しファイルを検索するには、ls -aコマンドを使うか、明示的にパターンを指定する必要があります。

例えば、.*を使うことで、すべての隠しファイルを表示できます。

ls -d .*

このコマンドは、現在のディレクトリ内のすべての隠しファイルを表示します。

globでディレクトリのみを検索する方法は?

globを使用してディレクトリのみを検索するには、/を使ってディレクトリを指定します。

例えば、特定のパターンにマッチするディレクトリを検索する場合、*/を使います。

# 例: 現在のディレクトリ内のすべてのディレクトリを表示
ls -d */

このコマンドは、現在のディレクトリ内のすべてのディレクトリをリスト表示します。

まとめ

この記事では、globの基本的な使い方や応用例、制限と注意点について詳しく解説しました。

globを活用することで、ファイル名やパスのパターンマッチングを効率的に行うことができ、作業の効率を向上させることが可能です。

ぜひ、実際のシェル環境でglobを試してみて、ファイル管理や検索のスキルを向上させてください。

  • URLをコピーしました!
目次から探す