名前で始まるディレクトリを一覧find
表示するコマンドを作成しようとしていますが、大文字と小文字を区別しないでください(rhel v7)。これを行う方法はありますか?/home
adm_
find
答え1
この-iname
オプションはあなたが探しているものです。
find /home -iname 'adm_*'
-type d
ディレクトリの制限を追加します。
find /home -iname 'adm_*' -type d
答え2
パターンに一致する名前で実行したい操作に応じて、2つの方法でこれを実行できます。
単に印刷したい場合は、Linuxシステムで-iname
代わりに使用してください-name
。find
find /home -type d -iname 'adm_*'
次の目的で使用するにはfind
:
find /home -type d -iname 'adm_*' -exec sh -c '
for dirpath do
# use "$dirpath" here
done' sh {} +
これにより、大文字と小文字を区別しないパターンの下またはすべてのディレクトリにインラインシェルスクリプトが適用されます/home
。
検索を再帰的に制限したい場合は、検索パスの後に(作業/home
前に)挿入することもできます。-maxdepth 1
シェルで直接使用することもできます。を使用すると仮定し、シェルオプションをbash
設定します。nocaseglob
shopt -s nocaseglob
printf '%s\n' /home/adm_*/
/home
パターンに一致するすべてのディレクトリパス名は、大文字と小文字を区別せずに印刷されます。末尾は/
ディレクトリだけが一致することを保証します。
サブディレクトリ内でも検索するには、オプションを追加に設定してglobstar
次を使用します**
。
shopt -s nocaseglob globstar
printf '%s\n' /home/**/adm_*/
明らかにループで直接使用できます。
shopt -s nocaseglob globstar dotglob nullglob
for dirpath in /home/**/adm_*/; do
# use "$dirpath" here
done
このdotglob
オプションを使用すると、ワイルドカードパターンが隠された名前と一致し(find
完了したら)、nullglob
一致するものがない場合はパターンが完全に削除されます。
答え3
find
非標準拡張をサポートしていない実装では、-iname
次のものを使用できます。
find /home -name '[aA][dD][mM]_*' -type d
一部のfind
実装(find
RHELのGNUを含む)の場合、名前に現在のロケールで有効な文字を形成しないバイトシーケンスを含むファイルは含まれません。行為:
LC_ALL=C find /home -name '[aA][dD][mM]_*' -type d
Cロケールと同様に、すべてのシングルバイト値は有効な文字を形成します。 (そしてa
、、、、、はすべて移植可能な文字セットの一部であるため、通常、そのエンコーディングはシステム内のすべてのロケールで一定A
ですd
。)D
m
M
_
GNU標準と同等の場合は、-maxdepth 1
次のことができます。
LC_ALL=C find /home/. ! -name . -prune -name '[aA][dD][mM]_*' -type d
(技術的にはこれは-mindepth 1 -maxdepth 1
FreeBSDに似ており、-depth 1 -prune
実際に必要なものに近いです(ここでは.
深さ0()がパターンと一致しないため除外したくありません))。