Como grep resultados da árvore UNIX recursiva junto com cada nó da árvore?

3

Aqui está o que eu faço

tree -R /Applications/NetBeans/NetBeans\ 7.0.app/ | perl -e 'while (<>) { print if /java$/ }'

mas é claro que isso não retorna o resultado que eu quero.

O que eu quero é exibir um arquivo java executável junto com seu diretório recursivo para que eu saiba onde está esse arquivo java. Algo como essa estrutura abaixo

'-- Contents
    '-- Resources
        '-- NetBeans
            '-- ExecutableJavaEnv
                '-- java

Esta questão é inspirada em minha pergunta sobre SU . A exibição da estrutura acima, na verdade, não é realmente importante porque não tenho certeza se posso obter o que desejo usando find . O que eu preciso é apenas obter o caminho para que eu possa definir o meu TextMate para executar Java do NetBeans em vez de /usr/bin/java do meu Mac OS X 10.5.8. Conselhos Ajuda?

1ª edição:

Obrigado por respostas até agora, eu aprecio isso. Aqui está o resultado do comando que eu tentei:

. find /Applications/NetBeans/NetBeans\ 7.0.app/ -name java
/Applications/NetBeans/NetBeans 7.0.app//Contents/Resources/NetBeans/java
. ll /Applications/NetBeans/NetBeans\ 7.0.app/Contents/Resources/NetBeans/
total 632
-rw-rw-r--   1 arie  admin   6.6K Apr  8 09:29 CREDITS.html
-rw-rw-r--   1 arie  admin   1.7K Apr  8 09:29 DISTRIBUTION.txt
-rw-rw-r--   1 arie  admin   2.1K Apr  8 09:30 LEGALNOTICE.txt
-rw-rw-r--   1 arie  admin    78K Apr  8 09:30 LICENSE.txt
-rw-rw-r--   1 arie  admin   5.4K Apr  8 09:30 README.html
-rw-rw-r--   1 arie  admin   158K Apr  8 09:30 THIRDPARTYLICENSE.txt
drwxrwxr-x   8 arie  admin   272B Apr  8 09:29 apisupport/
drwxrwxr-x   3 arie  admin   102B Apr  8 10:32 bin/
drwxrwxr-x   9 arie  admin   306B Jul  1 15:56 cnd/
drwxrwxr-x   9 arie  admin   306B Apr  8 09:29 dlight/
drwxrwxr-x   9 arie  admin   306B Apr  8 09:30 enterprise/
drwxrwxr-x   6 arie  admin   204B Apr  8 09:30 ergonomics/
drwxrwxr-x   6 arie  admin   204B Jun 11 22:17 etc/
drwxrwxr-x   7 arie  admin   238B Apr  8 09:30 groovy/
drwxrwxr-x  21 arie  admin   714B Jun 11 22:15 harness/
drwxrwxr-x  11 arie  admin   374B Jun 11 22:25 ide/
drwxrwxr-x  12 arie  admin   408B Jul  1 15:56 java/
drwxrwxr-x  10 arie  admin   340B Apr  8 10:15 mobility/
-rw-rw-r--   1 arie  admin    33K Apr  8 09:30 moduleCluster.properties
drwxrwxr-x  15 arie  admin   510B Jun 11 22:17 nb/
-rw-rw-r--   1 arie  admin    15K Apr  8 09:30 netbeans.css
drwxrwxr-x  11 arie  admin   374B Apr  8 09:30 php/
drwxrwxr-x  11 arie  admin   374B Jun 11 22:25 platform/
drwxrwxr-x  10 arie  admin   340B Apr  8 09:30 profiler/
drwxrwxr-x   3 arie  admin   102B Apr  8 08:43 ruby/
drwxrwxr-x   7 arie  admin   238B Apr  8 09:30 websvccommon/
. 

E para outra resposta é essa

. find /Applications/NetBeans/NetBeans\ 7.0.app -type f -executable -name java
find: -executable: unknown option
    
por Arie 23.07.2011 / 13:33

3 respostas

5

Para localizar arquivos executáveis chamados java no diretório especificado:

find '/Applications/NetBeans/NetBeans 7.0.app/' -name java -type f -perm -u+x

A saída será um nome de arquivo por linha, por exemplo,

/Applications/NetBeans/NetBeans 7.0.app/Contents/Resources/NetBeans/ExecutableJavaEnv/java

Se você quiser omitir a parte …/NetBeans 7.0.app , primeiro mude para o diretório e execute find no diretório atual ( . ). Ainda haverá um prefixo ./ .

cd '/Applications/NetBeans/NetBeans 7.0.app/'
find . -name java -type f -perm -u+x

Estritamente falando, -perm u+x seleciona todos os arquivos que são executáveis pelo seu proprietário, não todos os arquivos que você pode executar. O GNU find tem uma opção -executable para procurar por arquivos nos quais você tenha permissão de execução, considerando todos os modos de arquivo e ACLs, mas essa opção não está disponível em outros sistemas como o OSX. Na prática, é improvável que isso importe; na verdade, para o seu caso de uso, você pode esquecer completamente as permissões e apenas corresponder a -name java -type f .

-type f seleciona apenas arquivos regulares, não diretórios ou links simbólicos. Se você quiser incluir links simbólicos em arquivos regulares na pesquisa, adicione a opção -L a find (imediatamente após o comando find , antes do nome do diretório a ser pesquisado).

    
por 23.07.2011 / 14:32
2

Acho que é isso que você quer:

find /Applications/NetBeans/NetBeans\ 7.0.app -type f -executable -name java
    
por 23.07.2011 / 14:07
0

Parece que pode ser feito facilmente com o find: find /path/ -name java . (Por que você não tentou).

    
por 23.07.2011 / 14:08