web-dev-qa-db-ja.com

すべてのサブフォルダーでワイルドカード名を検索するにはどうすればよいですか?

すべてのサブフォルダーでワイルドカード名を検索するにはどうすればよいですか? DOSコマンドに相当するもの:dir *pattern* /s * nix?

29

findを使用できます。たとえば、ファイル名にabcdが含まれるすべてのファイルとディレクトリを検索する場合は、次のコマンドを実行できます。

find . -name '*abcd*'
43
Ryan A.

Zsh:

_ls -ld -- **/*abcd*
_

Ksh93:

_set -o globstar     # put this line in your ~/.kshrc
ls -ld -- **/*abcd*
_

バッシュ≥4:

_shopt -s globstar   # put this line in your ~/.bashrc
ls -ld -- **/*abcd*
_

ヤシュ:

_set -o extendedglob # put this line in your ~/.yashrc
ls -ld -- **/*abcd*
_

tcsh:

_set globstar
ls -ld -- **/*abcd*
_

魚:

_ls -ld -- **abcd*
_

(これらのシェルの一部は、ディレクトリツリーを下るときにシンボリックリンクをたどります。zshyash、またはtcshを好まないシェルの一部には、_***/*abcd*_が必要です)。

ポータブル(非常に古いシステムを除く; OpenBSDには長い時間がかかりましたが、最終的に_exec … +_を5.1以降サポートしています):

_find . -name '*abcd*' -exec ls -ld {} +
_

POSIXではなく、* BSD、Linux、Cygwin、BusyBoxで動作します。

_find . -name '*abcd*' -print0 | xargs -0 ls -ld
_

一部のBSDを除いて、一致するファイルが見つからない場合、_ls -ld_は引数なしで実行されるため、_._がリストされます。一部のxargs実装では、_-r_オプションを使用して回避できます。

他の回答では言及されていません

ls -R1 | grep pattern

使用されるls引数:

-R, --recursive
       list subdirectories recursively
-1     list one file per line
0