大文字と小文字を区別しないディレクトリ検索?

大文字と小文字を区別しないディレクトリ検索?

複数の既存フォルダのフォルダ構造を再構築する作業中です。したがって、欠落しているフォルダがある場合は追加する必要があります。

まず、ifコマンドを使用してディレクトリが存在することを確認し、存在しない場合はディレクトリを作成します。大文字と小文字が区別されたため、同じフォルダを再作成しました。

例:ABCを含むフォルダはすでに存在しますが、abcがスキャンされているため、abcを含む新しいフォルダを再作成し、時にはAbcを含むフォルダが存在することがあります。

ベストアンサー1

存在するbash

shopt -s nullglob nocaseglob
set -- [a]bc/
if [ "$#" -gt 0 ]; then
    echo 'There is at least one directory called "abc" (case ignored):'
    printf '\t%s\n' "$@"
fi

2つのbashシェルオプションは、nullglobパターンと一致するディレクトリがあるかどうかをnocaseglobテストするために使用されます(大文字と小文字を区別しない)。[a]bc/このnullglobオプションを使用すると、一致するものがない場合(そうでない場合は拡張されません)、パターンが削除され、パターン一致で大文字とnocaseglob小文字が区別されなくなります。

ディレクトリと一致するファイル名を呼び出す[a]bc/代わりに使用します。abc私たちは[a]シェルがワイルドカードを実行することを強制します。みんな名前と一致し、後で/一致をディレクトリに限定します。これを引数として、set位置引数を一致するディレクトリ名に設定します。それからそれを見つけることができ、$@一致する数量をで見つけることができます$#

テスト:

$ mkdir abc aBc ABc   # create three directories with only case diffs in their names
$ touch abC           # ... and also a file

$ bash ./script.sh
There is at least one directory called "abc" (case ignored):
        ABc/
        aBc/
        abc/

おすすめ記事