如何grep递归UNIX树结果以及每个树节点?

Ari*_*rie 3 find executable files

这是我所做的

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

但这当然不会返回我想要的结果。

我想要的是显示一个可执行的 java 文件及其递归目录,以便我知道该 java 文件在哪里。像下面这样的结构

`-- Contents
    `-- Resources
        `-- NetBeans
            `-- ExecutableJavaEnv
                `-- java
Run Code Online (Sandbox Code Playgroud)

这个问题的灵感来自我关于 SU 的问题。上面的结构显示实际上并不重要,因为我不确定使用find. 我需要的只是获取路径,以便我可以将 TextMate 设置为运行 NetBeans 的 Java,而不是/usr/bin/java从我的 Mac OS X 10.5.8 运行。建议?帮助?

第一次编辑:

到目前为止,感谢您的回答,我很感激。这是我尝试的命令的结果:

. 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/
. 
Run Code Online (Sandbox Code Playgroud)

另一个答案是这个

. find /Applications/NetBeans/NetBeans\ 7.0.app -type f -executable -name java
find: -executable: unknown option
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 5

查找java指定目录下调用的可执行文件:

find '/Applications/NetBeans/NetBeans 7.0.app/' -name java -type f -perm -u+x
Run Code Online (Sandbox Code Playgroud)

输出将是每行一个文件名,例如

/Applications/NetBeans/NetBeans 7.0.app/Contents/Resources/NetBeans/ExecutableJavaEnv/java
Run Code Online (Sandbox Code Playgroud)

如果要省略…/NetBeans 7.0.app部分,请先切换到目录并find在当前目录(.)上运行。仍然会有一个./前缀。

cd '/Applications/NetBeans/NetBeans 7.0.app/'
find . -name java -type f -perm -u+x
Run Code Online (Sandbox Code Playgroud)

严格来说,-perm u+x选择所有可由其所有者执行的文件,而不是您可以执行的所有文件。GNU find 有一个-executable选项来查找您具有执行权限的文件,考虑所有文件模式和 ACL,但此选项在其他系统(如 OSX)上不可用。实际上,这不太重要。事实上,对于您的用例,您可以完全忘记权限而只匹配-name java -type f.

-type f仅选择常规文件,而不选择目录或符号链接。如果要在搜索中包含到常规文件的符号链接,请添加-L选项find(紧接在find命令之后,要搜索的目录名称之前)。