ウェブサイト検索

Linuxにおけるファイル名を一致させるためのワイルドカードを使用した10の実用的な例


ワイルドカード(メタ文字とも呼ばれます)は、他の文字を表す記号または特殊文字です。任意のコマンド、例えばlsコマンドやrmコマンドと組み合わせて、特定の条件に一致するファイルを一覧表示したり削除したりすることができます。

参考: Linuxにおける演算子チェーンの10の便利な実用例

これらのワイルドカードはシェルによって解釈され、実行するコマンドに結果が返されます。Linuxには3つの主要なワイルドカードがあります:

  • アスタリスク (*) – どんな文字(文字がない場合も含む)の1回以上の出現と一致します。
  • クエスチョンマーク (?) – 任意の文字の単一の出現を表すか、一致させます。
  • ブラケットされた文字 ([ ]) – 四角のブラケット内に囲まれた文字の出現に一致します。数字、文字、その他の特殊文字など、異なるタイプの文字(英数字)を使用することが可能です。

正しいファイル名を一致させるためにどのワイルドカードを使用するか慎重に選ぶ必要があります:以下の例で説明されているように、すべてのワイルドカードを1つの操作で組み合わせることも可能です。

Linuxでワイルドカードを使用してファイル名を一致させる方法

この記事の目的のために、各例を示すために次のファイルを使用します。

createbackup.sh  list.sh  lspace.sh        speaker.sh
listopen.sh      lost.sh  rename-files.sh  topprocs.sh

1. このコマンドは、名前が l で始まり(これは接頭辞です)、任意の文字が1回以上続くすべてのファイルにマッチします。

$ ls -l l*	

2. この例は、users-0 で始まり、1回以上の任意の文字で終わるすべてのファイル名をコピーするための * の別の使用法を示しています。

$ mkdir -p users-info
ls users-0*
mv -v users-0* users-info/	# Option -v flag enables verbose output

3. 次のコマンドは、lで始まり、任意の1文字が続き、st.sh(接尾辞)が付いているファイル名をすべて一致させます。

$ ls l?st.sh	

4. 下記のコマンドは、名前が l で始まり、角括弧の中の任意の文字が続いて、st.sh で終わるすべてのファイルにマッチします。

$ ls l[abdcio]st.sh 

Linuxでファイル名に一致させるためのワイルドカードの組み合わせ方

複雑なファイル名マッチング基準を構築するために、ワイルドカードを組み合わせることができます。以下の例で説明します。

5. このコマンドは、任意の2文字で始まり、stで続き、1文字以上の任意の文字で終わるすべてのファイル名に一致します。

$ ls
ls ??st*

6. この例は、[clst] のいずれかの文字で始まり、1つ以上の任意の文字で終わるファイル名に一致します。

$ ls
ls [clst]*

7. この例では、次のいずれかの文字 [clst] で始まり、次にこれらの [io] のいずれか、さらに任意の1文字、その後に t が続き、最後に任意の文字が1回以上現れるファイル名のみがリストされます。

$ ls
ls [clst][io]?t*

8. ここでは、任意の文字が1回以上続くファイル名の接頭辞があり、続いて文字 tar があり、任意の文字が1回以上続くファイル名が削除されます。

$ ls
rm *tar*
ls

Linuxで設定されたキャラクターを一致させる方法

9. それでは、文字のセットを指定する方法を見てみましょう。以下に、システムユーザー情報を含むファイル名を考えてみます。

$ ls

users-111.list  users-1AA.list  users-22A.list  users-2aB.txt   users-2ba.txt
users-111.txt   users-1AA.txt   users-22A.txt   users-2AB.txt   users-2bA.txt
users-11A.txt   users-1AB.list  users-2aA.txt   users-2ba.list
users-12A.txt   users-1AB.txt   users-2AB.list  users-2bA.list

このコマンドは、名前がusers-iで始まり、数字、小文字のアルファベットまたは数字の後に数字が続き、任意の文字が1回以上続くすべてのファイルと一致します。

$ ls users-[0-9][a-z0-9][0-9]*

次のコマンドは、users-iで始まり、数字、英小文字または英大文字または数字の後に数字が続き、さらに1つ以上の任意の文字で終わるファイル名と一致します。

$ ls users-[0-9][a-zA-Z0-9][0-9]*

この後のコマンドは、users-iで始まり、数字、英大文字または小文字、次に英大文字または小文字が続き、任意の文字が1回以上続くすべてのファイル名にマッチします。

$ ls users-[0-9][a-zA-Z0-9][a-zA-Z]*

Linuxで文字のセットを否定する方法

10. また、!記号を使用して文字のセットを否定することもできます。次のコマンドは、users-iで始まり、数字、数字以外の有効なファイル名文字、次に小文字または大文字の文字が続き、1回以上の任意の文字で終わるすべてのファイル名をリストします。

$ ls users-[0-9][!0-9][a-zA-Z]*

それでは今のところはこれで終わりです!上記の例を試してみたなら、Linuxでファイル名にマッチするワイルドカードの使い方について良い理解を得られたことでしょう。

Linuxでワイルドカードを使用する例を示した次の記事もお読みいただけるかもしれません:

  1. Linuxで特定のディレクトリまたは別のディレクトリにtarファイルを抽出する方法
  2. 特定の拡張子を持つファイルを除いて、ディレクトリ内のすべてのファイルを削除する3つの方法
  3. Linuxで効果的なBashスクリプトを書くための10の役立つヒント
  4. ファイル内のテキストや文字列をフィルタリングするためのAwkおよび正規表現の使用方法

何か共有したいことや質問がある場合は、以下のコメントフォームを使用してください。

関連記事: