Encontrar diretório, se coincidir, então não recurse

0

No meu Mac, estraguei a instalação do SDK do Android. Eu estava olhando para limpá-lo, encontrando todas as referências a "android".

O problema é que, quando executo o comando find / -name "*android*" , obtenho uma lista bastante extensa.

Em vez desta lista:

/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

Eu gostaria de receber:

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

Ele não pesquisa os subdiretórios se o diretório corresponder.

    
por Isaac 13.09.2018 / 02:09

1 resposta

3

Se você precisa apenas de diretórios:

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

Comentários sobre o código:

.             # 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).

Simplificado:

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

Se você também deseja arquivos:

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

Advertência: isso relatará todos os arquivos encontrados e, em seguida, os diretórios. Não está claro se, se um arquivo chamado "android" for encontrado, o diretório correspondente deve ser evitado.

    
por 13.09.2018 / 03:02

Tags