Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 使用find命令对特定类型的可执行文件进行计数_Unix_Find - Fatal编程技术网

Unix 使用find命令对特定类型的可执行文件进行计数

Unix 使用find命令对特定类型的可执行文件进行计数,unix,find,Unix,Find,我试图使用Unix的find命令来计算某一类型目录(即Solaris(MSB)可执行文件)中可执行文件的数量。我知道我可以很容易地获得这个目录中所有可执行文件的计数 find . -type f -perm -u+rx | wc -l 但是,这并不以独占方式计算Solaris(MSB)可执行文件。我想,为了解决这个问题,我只需要加入一个-name标志,类似这样的东西 find . -name "sparc*" -type f -perm -u+rx | wc -l 只有当我删除命令中指定它们

我试图使用Unix的find命令来计算某一类型目录(即Solaris(MSB)可执行文件)中可执行文件的数量。我知道我可以很容易地获得这个目录中所有可执行文件的计数

find . -type f -perm -u+rx | wc -l
但是,这并不以独占方式计算Solaris(MSB)可执行文件。我想,为了解决这个问题,我只需要加入一个
-name
标志,类似这样的东西

find . -name "sparc*" -type f -perm -u+rx | wc -l
只有当我删除命令中指定它们需要可执行的部分时,这将正确返回6,如果我保留命令的这一部分,它将返回一个0的计数,这是“错误的”。当我看下面的
ls-l
命令时,我可以看到这些文件是可执行的,我想?或者它们指向一个可执行文件?这可能是问题的根源

ls -l    
lrwxrwxrwx  1 root   other          57 Jul 15  2005 sparc-sun-solaris2.9-c++ -> /usr/local/gnu/pkg/gcc-3.3.6/bin/sparc-sun-solaris2.9-c++*
任何洞察都将不胜感激。

试试看

find -L . -type f -perm -u+rx | wc -l

或者任何你需要的条件

选项
-L
指示
find
遵循符号链接,而不是处理链接本身。(参见示例)

例如,使用符号链接

sparc-sun-solaris2.9-c++ -> /usr/local/gnu/pkg/gcc-3.3.6/bin/sparc-sun-solaris2.9-c++*
find
的行为应该像文件
/usr/local/gnu/pkg/gcc-3.3.6/bin/sparc-sun-solaris2.9-c++
将直接位于
sparc-sun-solaris2.9-c++

如果您的
查找
不支持选项
-L
,您可以尝试
-如下所示:

find . -follow -name "sparc*" -type f -perm -u+rx | wc -l

对的它指向一个可执行文件。我明白了,我明白了。不管怎样,我可以在命令中指定某个地方,而不是考虑硬链接而不是文件名?@有趣的是,我实际上不知道unix文件系统有硬/软链接功能。然后我可以将-name标志附加到命令并执行类似于,
find-L的操作吗-命名“*sparc*”-类型f-perm-u+rx | wc-l
,因为上面的命令现在统计所有符号链接的可执行文件,而不仅仅是solaris one,我已经看到了您的编辑。在测试了提供的命令之后,我仍然得到0 count的返回值。指定
-L
是否不强制
-name
搜索
/usr/local/gnu/pkg/gcc-3.3.6/bin/sparc-sun-solaris2.9-c++
,而是搜索不是可执行文件的
sparc-sun-solaris2.9-c++
?我不在一个可以测试我建议的命令的系统上。请逐步尝试该命令,例如
find-L.
find-L-键入f
查找-L-键入f-perm-u+rx
并与相应命令的输出进行比较,而不使用
-L
。可以,谢谢您的帮助。我将选择此作为答案并继续尝试。我只是觉得我遗漏了一些东西,即使我尝试一步一步地执行命令,开始使用
find-L.
我得到的回报是
find:path list谓词list
有什么想法吗@博多
find . -follow -name "sparc*" -type f -perm -u+rx | wc -l