はじめに
Linux のワイルドカード(globbing パターンとも呼ばれます)は、シェルでファイル名をマッチングし展開するために使用される特殊文字です。これらの強力なツールを使いこなすことで、Linux コマンドラインでの作業効率を大幅に向上させることができます。このチュートリアルでは、Linux のワイルドカードの基本を解説し、特定のパターンを持つファイルをコピーする方法を説明します。これにより、ファイル管理タスクを効率化できます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
Linux のワイルドカード(globbing パターンとも呼ばれます)は、シェルでファイル名をマッチングし展開するために使用される特殊文字です。これらの強力なツールを使いこなすことで、Linux コマンドラインでの作業効率を大幅に向上させることができます。このチュートリアルでは、Linux のワイルドカードの基本を解説し、特定のパターンを持つファイルをコピーする方法を説明します。これにより、ファイル管理タスクを効率化できます。
Linux では、ワイルドカードはパターンを使用して複数のファイルにマッチングするのに役立つ特殊文字です。一度に多くのファイルを管理する必要がある場合に特に役立ちます。現在のディレクトリにあるファイルを調べて、最も一般的なワイルドカードを見てみましょう。
まず、作業対象となるすべてのファイルを確認しましょう。
cd ~/project/wildcards_lab
ls
次のようなさまざまな拡張子を持つファイルのリストが表示されるはずです。
backup data_02.csv doc2.pdf file3.txt image3.jpg readme.md
config.yml data_03.csv documents images report1.txt report_final.txt
data_01.csv doc1.pdf file1.txt image1.jpg report2.txt script.sh
file2.txt image2.jpg
アスタリスク *
は最も一般的なワイルドカードです。任意の数の文字(ゼロを含む)にマッチングします。実際に見てみましょう。
すべてのテキストファイル(.txt で終わるファイル)をリスト表示するには:
ls *.txt
次のように表示されるはずです。
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt
すべての画像ファイル(.jpg で終わるファイル)をリスト表示するには:
ls *.jpg
出力:
image1.jpg image2.jpg image3.jpg
疑問符 ?
は、正確に 1 文字にマッチングします。ファイルを見つけるために使用してみましょう。
ls file?.txt
このコマンドは、「file」で始まり、その後に正確に 1 文字が続き、「.txt」で終わるファイルをリスト表示します。
出力:
file1.txt file2.txt file3.txt
角括弧 []
を使用すると、指定されたセットから任意の 1 文字にマッチングできます。
ls data_0[1-2].csv
このコマンドは、「data_0」で始まり、その後に 1 または 2 が続き、「.csv」で終わる CSV ファイルをリスト表示します。
出力:
data_01.csv data_02.csv
Linux では、ドット (.) で始まるファイルは隠しファイルです。ワイルドカードを使用して、これらのファイルも検索できます。
ls .*
出力には以下が含まれます。
. .. .hidden_file1 .hidden_file2
注:.
と ..
は、それぞれ現在のディレクトリと親ディレクトリを表します。
これらのコマンドを試して、結果を観察してください。これらの基本的なワイルドカードを理解することは、ファイルコピー操作に使用する前に不可欠です。
基本的なワイルドカードを理解したところで、それらを使用してファイルを効率的にコピーしてみましょう。ファイルのコピーの一般的な構文は次のとおりです。
cp [options] source_file(s) destination
いくつかの整理用のディレクトリを作成し、さまざまなパターンでファイルをコピーする練習をしましょう。
すべてのテキストファイルを backup ディレクトリにコピーしてみましょう。
cd ~/project/wildcards_lab
cp *.txt backup/
このコマンドは、.txt
で終わるすべてのファイルを backup ディレクトリにコピーします。確認してみましょう。
ls backup/
次のように表示されるはずです。
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt
次に、すべての画像ファイルを images ディレクトリにコピーしてみましょう。
cp image*.jpg images/
これは、「image」で始まり、「.jpg」で終わるすべてのファイルを images ディレクトリにコピーします。確認してみましょう。
ls images/
出力:
image1.jpg image2.jpg image3.jpg
ブレース展開 {pattern1,pattern2}
を使用すると、複数のパターンを指定できます。PDF ファイルと CSV ファイルの両方を documents ディレクトリにコピーしてみましょう。
cp *.{pdf,csv} documents/
このコマンドは、.pdf
または .csv
で終わるすべてのファイルを documents ディレクトリにコピーします。確認してみましょう。
ls documents/
出力:
data_01.csv data_02.csv data_03.csv doc1.pdf doc2.pdf
||
演算子を使用して、異なるパターンに一致するファイルをコピーすることもできます。
cp report*.txt script.sh backup/
これは、「report」で始まり、「.txt」で終わるすべてのファイルと、script.sh ファイルを backup ディレクトリにコピーします。backup ディレクトリに何があるか確認してみましょう。
ls backup/
更新された出力:
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt script.sh
ファイルをコピーする際、タイムスタンプやアクセス許可などの属性を保持したい場合があります。-p
オプションを使用します。
cp -p config.yml backup/
属性が保持されたことを確認するには:
ls -l config.yml
ls -l backup/config.yml
タイムスタンプとアクセス許可は、両方のファイルで同一であるはずです。
これらのコマンドを試して、さまざまなワイルドカードパターンがどのようにファイルの効率的なコピーに役立つかを調べてみてください。
基本をマスターしたので、より具体的なファイル操作を実行するための、さらに高度なワイルドカードパターンを見ていきましょう。
まず、高度なテクニックを練習するための新しいディレクトリを作成しましょう。
cd ~/project/wildcards_lab
mkdir advanced
文字クラスを使用すると、文字のセットから単一の文字にマッチングできます。
## 'd' または 'f' で始まるファイルをコピーする
cp [df]*.* advanced/
これは、「d」または「f」で始まるすべてのファイルを advanced ディレクトリにコピーします。確認してみましょう。
ls advanced/
出力:
data_01.csv data_02.csv data_03.csv doc1.pdf doc2.pdf file1.txt file2.txt file3.txt
開き括弧の後に !
または ^
記号を使用して、文字クラスを否定できます。'r' または 'i' で始まらないファイルをコピーしてみましょう。
mkdir advanced/filtered
cp [^ri]*.txt advanced/filtered/
確認してみましょう。
ls advanced/filtered/
出力:
file1.txt file2.txt file3.txt
さまざまなワイルドカードを組み合わせて、より具体的なパターンを作成してみましょう。
## 'data_0' で始まり、その後に 1 桁の数字が続き、'.csv' で終わるファイルをコピーする
cp data_0?.csv advanced/
この CSV ファイルが正しくコピーされたことを確認しましょう。
ls advanced/*.csv
出力:
advanced/data_01.csv advanced/data_02.csv advanced/data_03.csv
Bash は、標準のワイルドカードよりも強力な拡張グロビングパターンを提供します。まず、拡張グロビングを有効にします。
shopt -s extglob
これで、次のようなパターンを使用できます。
?(pattern)
: パターンの 0 回または 1 回の出現にマッチングします*(pattern)
: 0 回以上の出現にマッチングします+(pattern)
: 1 回以上の出現にマッチングします@(pattern)
: 正確に 1 回の出現にマッチングします!(pattern)
: パターン以外のすべてにマッチングします例を試してみましょう。
## 数字が続き、その後に .txt が続くファイルをコピーする
mkdir advanced/numbered
cp +([0-9])*.txt advanced/numbered/
元のファイルがこの正確なパターンに一致しないため、結果は空になる可能性があります。一致するファイルを作成してみましょう。
touch 123file.txt
cp +([0-9])*.txt advanced/numbered/
ls advanced/numbered/
出力:
123file.txt
ブレース展開は、複雑なパターンを作成するのに役立ちます。
## レポートファイル用のディレクトリを作成する
mkdir advanced/reports
## すべてのレポートファイルと設定ファイルをコピーする
cp {report*.txt,*.yml} advanced/reports/
確認してみましょう。
ls advanced/reports/
出力:
config.yml report1.txt report2.txt report_final.txt
これらの高度なテクニックは、ファイルをより正確に選択するのに役立ち、ファイルシステムの管理にかかる時間と労力を節約できます。これらのワイルドカードの組み合わせを試して、ファイル管理をより効率的にする方法を確認してください。
この最終ステップでは、これまで学習したすべてを組み合わせて、実践的なファイル管理の問題を解決します。この演習は、ワイルドカードの理解を強化し、その実用的な応用を実証します。
さまざまな種類のファイルを含むディレクトリを整理する責任のあるシステム管理者であるとします。次のことを行う必要があります。
このシナリオをシミュレートしてみましょう。
まず、さまざまな種類のファイルを含む新しいプロジェクトディレクトリを作成しましょう。
cd ~/project/wildcards_lab
mkdir project_files
cd project_files
## さまざまな種類のファイルを作成する
touch project_doc_v1.txt project_doc_v2.txt project_doc_final.txt
touch data_2023_01.csv data_2023_02.csv data_2023_03.csv
touch config_dev.yml config_test.yml config_prod.yml
touch backup_script_v1.sh backup_script_v2.sh
touch image001.png image002.png image003.png
touch .project_config .project_log
ディレクトリを確認してみましょう。
ls
出力:
backup_script_v1.sh config_prod.yml data_2023_02.csv image002.png project_doc_v1.txt
backup_script_v2.sh config_test.yml data_2023_03.csv image003.png project_doc_v2.txt
config_dev.yml data_2023_01.csv image001.png project_doc_final.txt
注:隠しファイル (.
で始まるファイル) は、基本的な ls
の出力には表示されません。
次に、さまざまなファイルタイプのディレクトリを作成し、ファイルを整理しましょう。
## ディレクトリを作成する
mkdir docs configs scripts data images backups
## テキストドキュメントを docs ディレクトリにコピーする
cp *doc*.txt docs/
## 設定ファイルを configs ディレクトリにコピーする
cp *.yml configs/
## スクリプトを scripts ディレクトリにコピーする
cp *.sh scripts/
## データファイルを data ディレクトリにコピーする
cp *.csv data/
## 画像を images ディレクトリにコピーする
cp *.png images/
整理を確認してみましょう。
echo "Documents:"
ls docs/
echo "Configurations:"
ls configs/
echo "Scripts:"
ls scripts/
echo "Data files:"
ls data/
echo "Images:"
ls images/
出力:
Documents:
project_doc_final.txt project_doc_v1.txt project_doc_v2.txt
Configurations:
config_dev.yml config_prod.yml config_test.yml
Scripts:
backup_script_v1.sh backup_script_v2.sh
Data files:
data_2023_01.csv data_2023_02.csv data_2023_03.csv
Images:
image001.png image002.png image003.png
すべての重要なファイルを含む包括的なバックアップを作成しましょう。
## すべての画像ファイル以外のファイルのバックアップを作成する
cp !(*.png|*backup*) backups/
## バックアップディレクトリの内容を確認しましょう
ls backups/
出力:
config_dev.yml config_test.yml data_2023_01.csv data_2023_03.csv project_doc_final.txt project_doc_v2.txt
config_prod.yml data_2023_02.csv project_doc_v1.txt
次に、特定のパターンに一致するファイルを見つけましょう。
## 2023 年のすべてのファイルを検索する
echo "Files from 2023:"
ls *2023*
## 最終バージョンまたはプロダクションバージョンをすべて検索する
echo "Final/Production versions:"
ls *final* *prod*
## バージョン 2 のファイルをすべて検索する
echo "Version 2 files:"
ls *v2*
出力:
Files from 2023:
data_2023_01.csv data_2023_02.csv data_2023_03.csv
Final/Production versions:
config_prod.yml project_doc_final.txt
Version 2 files:
backup_script_v2.sh project_doc_v2.txt
最後に、プロダクション設定と最終ドキュメントのみを含むデプロイメントパッケージを作成しましょう。
mkdir deployment_package
cp *prod*.yml *final*.txt deployment_package/
## デプロイメントパッケージを確認する
ls deployment_package/
出力:
config_prod.yml project_doc_final.txt
おめでとうございます!Linux ワイルドカードを使用した実践的なファイル管理演習を正常に完了しました。これらのスキルは、Linux 環境でファイルを効率的に管理し、反復的なタスクを自動化し、ファイルシステムを効果的に整理するために非常に役立ちます。
この実験では、特定のパターンを持つファイルをコピーし、管理するために、Linux のワイルドカードを効果的に使用する方法を学習しました。アスタリスク (*)、疑問符 (?)、角括弧 ([ ]) などの基本的なワイルドカードから始め、文字クラス、否定、拡張グロビングなどのより高度なテクニックに進みました。
習得した主なスキルは次のとおりです。
これらのスキルは、Linux コマンドラインでの作業時の生産性を大幅に向上させ、ファイル管理タスクを自動化し、ファイルシステムを効率的に整理することができます。Linux を使い続けるにつれて、これらのワイルドカードテクニックは、日々の操作において非常に貴重なツールとなるでしょう。
練習が完璧を作ることを忘れないでください。これらのワイルドカードを日常業務で多く使用するほど、より快適になり、習熟度も高まります。