web-dev-qa-db-ja.com

すべてのサブディレクトリを検索して、特定の名前のサブディレクトリを見つけるにはどうすればよいですか?

/dirというトップレベルのディレクトリと多くのサブディレクトリがあるとします。 /dirのサブディレクトリを検索して、x/x/dir/x/x/x/targetというサブディレクトリを見つけるにはどうすればよいですか?

この質問は、私が探しているものと似ていますが、正確ではありません: 特定のサブディレクトリのコマンドを見つける

ファイルを探すのではなく、特定の名前のディレクトリを探します。

12
bernie2436

find /dir -type d -name "your_dir_name"をお試しください。

/dirをディレクトリ名に置き換え、"your_dir_name"を探している名前に置き換えます。

-type dは、ディレクトリのみを検索するようにfindに指示します。

17
Vinz

1つまたは複数のディレクトリを見つけてgitリポジトリで古いメールアドレスを見つけるようなものを検索するためのより一般的なソリューションについては、次のパターンを見てください。

find . -type d -name .git -print0|\
    xargs -0r -I {} find {} -type f -print0 |\
    xargs -0r grep -e '[email protected]'
1
hildred
_echo **/target
_

または、1行に1つの一致を取得するには:

_printf %s\\n **/target
_

これは、zshではそのまま使用できます。 bashでは、最初に_shopt -s globstar_を実行する必要があります。これにより、ディレクトリへのシンボリックリンクも走査されることに注意してください。 ksh93では、最初に_set -o globstar_を実行する必要があります。

ディレクトリまたはディレクトリへのシンボリックリンクのみを一致させる場合は、末尾に_/_(つまり_**/target/_)を追加します。 zshでは、ディレクトリのみに一致し、ディレクトリへのシンボリックリンクには一致しないようにするには、その**/target(/)を作成します。

どのシェルでも、findコマンドを使用できます。

_find . -name target
_

LinuxおよびCygwinでは、_._はオプションです。ディレクトリのみを照合する場合は、_-type d_を追加します。