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

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

这就是我所做的

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

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

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

`-- Contents
    `-- Resources
        `-- NetBeans
            `-- ExecutableJavaEnv
                `-- java

这个问题的灵感来自于我在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/
. 

另一个答案是这样的

. find /Applications/NetBeans/NetBeans\ 7.0.app -type f -executable -name java
find: -executable: unknown option

答案1

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

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

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

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

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

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

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

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

答案2

我想这就是你想要的:

find /Applications/NetBeans/NetBeans\ 7.0.app -type f -executable -name java

答案3

看来可以用 find: 轻松完成find /path/ -name java。 (为什么你没有尝试过)。

相关内容