找不到选项-printf,现在怎么办?

Léo*_* 준영 46 macos printf find

我没有找到Mac的查找没有-printf选项的原因.Apple通常决定采取与其他命令不正交的选项吗?

如何在没有coreutils的Mac中获得与以下命令相同的结果

find . -printf "%i \n"         // command in Ubuntu
Run Code Online (Sandbox Code Playgroud)

eph*_*ent 46

这并不是说Apple取消了选项,而是OS X的UNIX基础主要是从FreeBSD派生出来的(其中很多部分),其中许多部分可以追溯到原来的UNIX ......而不是GNU实用程序,它们是重新实现的添加了许多功能.

在这种情况下,FreeBSDfind(1)不支持-printf,所以我不指望OS X的.相反,这应该适用于BSD-ish系统:

find . -print0 | xargs -0 stat -f '%i '
Run Code Online (Sandbox Code Playgroud)

它会失效了一个GNU用户态的系统上,不过,在那里你会写xargs -0 -r stat -c '%i ',因为xargs(1)stat(1)行为是不同的.

  • %N 打印文件完整路径,如果我只想要文件的基名怎么办? (3认同)
  • 出于某种原因,这会在OS X 10.8.4上的iTerm2中打印数字而不是字符串.相反,dmckee提出的来自MacPorts的`indutils`包的`gfind`工作正常. (2认同)

dmc*_*kee 18

好吧,ephemientbendin钉牢了原因.

我想补充说,如果你需要,没有什么能阻止你安装GNU find(来自findutils).如果你使用fink有一个findutils.MacPorts的有它.

  • 您可以使用[Homebrew](http://brew.sh/)安装它:`brew install findutils`然后使用`gfind`而不是`find`. (13认同)

abk*_*rim 17

MAc OS X查找二进制文件不支持-printf命令.brew install findutils在Mac上安装.这用-printf选项安装gfind.


小智 7

或者,你可以

find . -type f -exec stat -f "%z %N" {} \;
Run Code Online (Sandbox Code Playgroud)

当然,这不是你在linux上做同样的事情,而是适用于MacOS

find . -type f -exec stat -c "%s %N" {} \;
Run Code Online (Sandbox Code Playgroud)

在linux上产生类似(不相同但接近)的输出.