为近似计数 — — 为了了解计数所需的时间 — — 我从可以在 tcsh 中运行的多行命令开始。
我不是管道专家,因此我邀请您提供比我下面给出的最早答案更好的答案。
笔记
为了不让步行耗费过多的时间,我想:
- 只遍历几个最有可能包含二进制文件的层次结构
- 不从 /root 开始行走。
我对计数所花的时间以及近似计数同样感兴趣。
参考
答案1
我在 中使用以下内容bash
,保持整体方法(使用lipo
)相同:
time find ${PATH//:/ } /Applications /Developer /Library /System ~/Applications -type f -exec lipo -info '{}' ';' 2>/dev/null | grep -E "(x86_64|i.86|pent)" | tee binaries.txt | wc -l
它将创建一个binaries.txt
包含结果列表的文件,并将结果数量以及time
结果打印到标准输出。
我缩短了man 3 arch
基础grep
表达式,删除了i860
条目,并使用了$PATH
Unix 二进制位置的硬编码列表。我还-perm
从中删除了主要内容find
,因为它是一种启发式方法,可能会错过仅对特定用户可执行的二进制文件。
答案2
在tcsh
:
sh
uname -v && date &&\
2>/dev/null find /opt/X11/bin /opt/local/bin /opt/local/sbin \
/bin /sbin /usr/X11/bin /usr/bin /usr/local/bin /usr/sbin \
/Applications /Developer /Library /System ~/Applications \
-type f -perm +111 -exec lipo -info '{}' ';' | grep -E \
"(i386|x86_64|i860|i486|i486SX|pentium|i586|pentpro|i686|pentIIm3|pentIIm5|pentium4)" &&\
date && exit
输出的行数可以在文本编辑器(如 TextWrangler)中计算。从开头减去包含日期和时间的几行,从结尾减去包含日期和时间的两行,得到一个近似值。
如果你想知道为什么 grep 适用于十二种架构(而不是两种):这是要考虑全部目前已知的体系结构,其中 arch 手册页中的描述包括英特尔目前,找到除 i386 或 x86_64 之外的其他任何东西可能很少见或未知,但我希望这个问题的答案能够经得起时间的考验,而不仅限于这两个。
作为答案,这远非理想……
答案3
除了开头的问题之外
经过实验,以下是丹尼尔接受的答案的变体:
date && sw_vers && uname -a && touch /Users/Shared/binaries.log && bash
open /Users/Shared/binaries.log && time find ${PATH//:/ } \
/Applications /Developer /Library /System ~/Applications \
-type f -exec lipo -info '{}' ';' 2>/dev/null \
| grep -E "(x86_64|i.86|pent)" | tee /Users/Shared/binaries.log \
| wc -l && exit
它使用共享区域来写入文件,文件名称以 结尾.log
,并且应该在控制台中打开 .log。此外,终端窗口将显示日期和时间、系统版本和构建 — — 这些都是我喜欢记下来的东西。
如果控制台的其他窗口打开了,它不会将日志窗口带到前台,并且在完成时不会将终端带到前台。
在某些系统上,步行可能会非常耗时。
为了跑得更快
我们 可以使用-perm
-find
date && sw_vers && uname -a && touch /Users/Shared/binaries.log && bash
open /Users/Shared/binaries.log && time find ${PATH//:/ } \
/Applications /Developer /Library /System ~/Applications \
-perm +111 -type f -exec lipo -info '{}' ';' 2>/dev/null \
| grep -E "(x86_64|i.86|pent)" | tee /Users/Shared/binaries.log \
| wc -l && exit
—但作为丹尼尔评论,这可能会错过仅特定用户可执行的二进制文件。