大文字と小文字を区別せずに、特定のパターンに一致するすべてのファイルを一覧表示します。
たとえば、次のコマンドを実行します。
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
Manページでケースを検索しましたが、何も見つかりませんでした。
これは実際には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*)
globbingはls
ではなく異なる動作をする必要があります。これらはすべてシェルによってls
に渡されるファイルだからです。
Polemonで説明したように、*abc*
をファイルのリストに拡張するのはlsではなくシェルです。これはパターンマッチングと呼ばれます。
パターンマッチングの動作全体を大文字と小文字を区別しないように変更する以外に、*
以外の形式のパターンマッチングを使用できます。以下はbashであなたが望むことをするでしょう:
ls *[aA][bB][cC]*
バッシュマンから:
[...]囲まれた文字のいずれかに一致します。
これにより、*[aA][bB]c*
を使用してabc
またはABc
を照合できますが、abC
またはABC
は照合できません。または、フランス語の例で、e
文字のすべてのインスタンスに一致させることができます。
ls *[eéèêëEÉÈÊË]*
grep
に-i
(--ignore-case)オプションを追加して、以下の出力を取得することもできます。
[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
これはlsでは可能ではないと思いますが、代わりにfindを使用できます。
find . -maxdepth 1 -iname '*abc*'
Insensitiveオプションを追加する-i
を使用してファイルをGREPできます。
たとえば、abc
とABC
の両方を見つけるには、次のコマンドを実行します
[root@mtk bin]# ls -l | grep -i abc
640K -rw-r--r-- 1 mtk mtk 639K Sep 21 08:12 file1abc.txt
676K -rw-r--r-- 1 mtk mtk 674K Sep 21 08:12 file2ABC.txt
次のコードを使用します。
LC_COLLATE=en_US ; export LC_COLLATE
ls *abc*
LC_COLLATE=C ; export LC_COLLATE