大文字と小文字を区別しないパターンをlsと一致させるには?

大文字と小文字を区別しないパターンをlsと一致させるには?

大文字と小文字を無視し、特定のパターンに一致するすべてのファイルを一覧表示したいと思います。

たとえば、次のコマンドを実行します。

ls *abc*

大文字と小文字を無視し、ファイル名に「abc」を含むすべてのファイルを表示したいと思います。

-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file1abc.txt
-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file2ABC.txt

ノート

マンページでケースを検索しましたが、何も見つかりませんでした。

答え1

これは実際には.dllではなくシェルによって行われますls

では、bash以下を使用できます。

shopt -s nocaseglob

そしてそれからコマンドを実行します。

またはzsh:

unsetopt CASE_GLOB

またはYashから:

set +o case-glob

これで注文が来ます。

.bashrcそれぞれ、.zshrcまたはに入れることもできます.yashrc

またはzshを使用してください。

setopt extendedglob
ls -d -- (#i)*abc*

(つまり、ワイルドカードごとに大文字と小文字を区別しないワイルドカード)

ksh93の使用:

ls -d -- ~(i:*abc*)

欲しいワイルドカード代わりに、シェルが渡されるファイルであるlsため、動作が異なります。ls

答え2

*abc*Polemonが説明したように、ファイルのリストに展開されるのはlsではなくシェルです。これは…パターンマッチング

大文字と小文字を無視するようにパターン一致の動作全体を変更する代わりに、*次のように bash で目的の操作を実行できます。

ls *[aA][bB][cC]*

bashユーザーから:

[...]は含まれている文字の1つと一致します。

これにより、より細かい一致が可能になります。*[aA][bB]c*またはを使用して一致させることはできますが、またはを使用して一致させることはできません。または、その文字のすべてのインスタンスを一致させるフランス語の例は次のとおりです。abcABcabCABCe

ls *[eéèêëEÉÈÊË]*

答え3

-i(--ignore-case)オプションを追加して、次のgrep出力を取得することもできます。

[root@localhost ~]# ls -l | grep -i abc
-rw-r--r--  1 root root    0 Feb 25 20:41 fileabc.txt
-rw-r--r--  1 root root    0 Feb 25 20:41 fileABC.txt

答え4

次のコードを使用してください。

LC_COLLATE=en_US ; export LC_COLLATE
ls *abc*
LC_COLLATE=C ; export LC_COLLATE

関連情報