[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.txt
やfileA.txt
など、file
の後に1文字が続くファイルにマッチします。
角括弧([])の使い方
角括弧は、指定した文字のいずれか1文字にマッチします。
複数の選択肢から1文字を選ぶ場合に使用します。
例:file[1-3].txt
は、file1.txt
、file2.txt
、file3.txt
にマッチします。
波括弧({})の使い方
波括弧は、複数の選択肢を指定するために使用します。
カンマで区切った複数のパターンを一度に指定できます。
例:file{1,2,3}.txt
は、file1.txt
、file2.txt
、file3.txt
にマッチします。
否定(!)の使い方
否定は、指定した文字以外の任意の1文字にマッチします。
特定の文字を除外したい場合に便利です。
例:file[!1].txt
は、file2.txt
やfile3.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の挙動が異なる場合があります。
特に、nullglob
やfailglob
といったオプションが有効になっていると、パターンにマッチするファイルがない場合の挙動が変わります。
これらのオプションを確認し、必要に応じて設定を変更することが重要です。
# 例: nullglobを有効にする
shopt -s nullglob
ファイル名に特殊文字が含まれる場合の対処法
ファイル名にスペースや特殊文字(例:*
, ?
, [
など)が含まれている場合、globは正しく動作しないことがあります。
このような場合は、クオートで囲むか、エスケープする必要があります。
# 例: スペースを含むファイル名を扱う
ls "file with space.txt"
# または
ls file\ with\ space.txt
file with space.txt
大文字・小文字の区別
globはデフォルトで大文字と小文字を区別します。
つまり、*.txt
はfile.txt
にはマッチしますが、FILE.TXT
にはマッチしません。
大文字・小文字を区別せずに検索したい場合は、shopt -s nocaseglob
を使用して設定を変更することができます。
# 例: 大文字・小文字を区別せずに検索
shopt -s nocaseglob
ls *.txt
file.txt
FILE.TXT
よくある質問
まとめ
この記事では、globの基本的な使い方や応用例、制限と注意点について詳しく解説しました。
globを活用することで、ファイル名やパスのパターンマッチングを効率的に行うことができ、作業の効率を向上させることが可能です。
ぜひ、実際のシェル環境でglobを試してみて、ファイル管理や検索のスキルを向上させてください。