一致するものがあれば、繰り返さずにディレクトリを探す

一致するものがあれば、繰り返さずにディレクトリを探す

MacでAndroid SDKのインストールを台無しにしました。 「android」へのすべての参照を見つけて整理したいと思います。

問題は、コマンドを実行するとfind / -name "*android*"かなり広範なリストが表示されることです。

このリストの代わりに:

/usr/local/var/lib/android-sdk
/usr/local/var/lib/android-sdk/platforms/android-23
/usr/local/var/lib/android-sdk/platforms/android-24
/usr/local/var/lib/android-sdk/platforms/android-25
/usr/local/var/lib/android-sdk/platforms/android-26
/usr/local/var/lib/android-sdk/platforms/android-19
/usr/local/var/lib/android-sdk/platforms/android-28
/usr/local/var/lib/android-sdk/platforms/android-N
/usr/local/var/lib/android-sdk/system-images/android-23
/usr/local/var/lib/android-sdk/system-images/android-19
/usr/local/var/lib/android-sdk/system-images/android-N
...
/Library/Frameworks/Xamarin.Android.framework/Versions/5.1.2-1/lib/mandroid
/Library/Frameworks/Xamarin.Android.framework/Versions/5.1.2-1/lib/mandroid/platforms/android-15
/Library/Frameworks/Xamarin.Android.framework/Versions/5.1.2-1/lib/mandroid/platforms/android-16
/Library/Frameworks/Xamarin.Android.framework/Versions/5.1.2-1/lib/mandroid/platforms/android-18
/Library/Frameworks/Xamarin.Android.framework/Versions/5.1.2-1/lib/mandroid/platforms/android-20
/Library/Frameworks/Xamarin.Android.framework/Versions/5.1.2-1/lib/mandroid/platforms/android-21
/Library/Frameworks/Xamarin.Android.framework/Versions/5.1.2-1/lib/mandroid/platforms/android-19
/Library/Frameworks/Xamarin.Android.framework/Versions/5.1.2-1/lib/mandroid/platforms/android-10
/Library/Frameworks/Xamarin.Android.framework/Versions/5.1.2-1/lib/mandroid/platforms/android-17

私は欲しい:

/usr/local/var/lib/android-sdk
/Library/Frameworks/Xamarin.Android.framework

ディレクトリが一致すると、サブディレクトリは検索されません。

ベストアンサー1

ディレクトリのみが必要な場合:

find . -type d -iname '*android*' -a \( -prune  \)

コードコメント:

.             # Present directory
-type d       # Only directories
-iname        # Instead of `-name` to also match "Android" (ignore case).
'*android*'   # Pattern of name to search
-a            # Force the execution of next option on matching names.
              # probably redundant as all options are evaluated with an
              # implicit and in find
              # but: makes the intent explicitly clear.
\( -prune  \) # Remove the whole directory from further examination.
              # braces also optional (as it is only one command).

単純化する:

find . -type d -iname '*android*' -prune

ファイルも必要な場合:

find . -iname '*android*' -a \( -prune  \)

注:見つかったすべてのファイルとディレクトリが報告されます。 「android」というファイルが見つかった場合、そのディレクトリを避ける必要があるかどうかは不明です。

おすすめ記事