考虑一些常见的 *nix 系统(比如 Debian、CentOS、Arch 和 Kali)。
我一直用find
; 我不记得使用过 GNU find,但从我看到的一个例子中,我认为 GNU find 的语法可能更简单(尽管可能允许更少的操作)。
我有两个问题:
是find
通用系统中的默认“查找或操作”实用程序还是系统会同时提供 find
和GNU find
?
是GNU find
为了更简单find
?
Kus*_*nda 11
GNU 实用程序通常实现 POSIX 标准,然后还使用额外的功能扩展它以增加便利性(并且,另一方面,降低了跨 Unices 的可移植性)。可移植性方面是为什么您有时会在此站点上看到答案或评论,这些答案或评论非常谨慎地指出何时使用 GNU 实用程序或某个实用程序的其他特定实现。
如果您使用的是 Linux 系统,您很可能会使用 GNU 实现find
,而您可能不会安装另一个find
。在非 Linux 系统上,您将有一个本机find
并可以安装 GNU find
(通常会安装在名称下,gfind
或者很少安装gnufind
)。
与大多数 GNU 实用程序一样,GNUfind
实现并扩展 了标准find
规范。因此,它不是“更简单”,而是可以说更复杂以便更方便,并且使用它来完成某些复杂的任务比使用严格标准的find
.
find
例如,通常的扩展实现实现标准没有提到的-maxdepth
and-mindepth
谓词,find
特别是GNU还必须-printf
使用各种格式可能性(标准find
没有-printf
)打印出找到的路径名,以及执行常规的谓词各种对路径名,以及其他一些非标准的谓词,其中一些在其它实施方式中也有发现的表达式匹配find
(可能具有非常轻微不同的语义,比如-execdir
其中工程根据稍有不同什么find
正在被使用1)。
-delete
您链接到的答案中使用的谓词是非标准的,但由 GNUfind
以及在find
其他一些非 Linux 系统上实现。GNUfind
的-delete
会抱怨,如果你用它来删除一个非空目录,但如OpenBSD的相应选项find
不会(也不会删除非空目录)。
大多数 Linux 系统,无论发行版如何,都使用相同的 coreutils 和 findutils 工具集(很明显,存在像 busybox 这样的变体)。要使用一组完全不同的工具实现,您必须迁移到其中一个开源 BSD 系统,或者迁移到 macOS、Solaris、AIX 或其他一些商业 Unix。
1 GNU在使用时find
预先./
添加路径名,-execdir
而其他一些实现则没有。