考虑一些常见的 *nix 系统(比如 Debian、CentOS、Arch 和 Kali)。
我一直用find
;我不记得使用过 GNU find,但是从我看到的一个示例中,我假设 GNU find 的语法可能更简单(尽管可能允许更少的操作)。
我有两个问题:
是
find
通用系统中默认的“查找或操作”实用程序,还是系统会同时find
带有和GNU find
?是
GNU find
为了更简单find
?
考虑一些常见的 *nix 系统(比如 Debian、CentOS、Arch 和 Kali)。
我一直用find
;我不记得使用过 GNU find,但是从我看到的一个示例中,我假设 GNU find 的语法可能更简单(尽管可能允许更少的操作)。
我有两个问题:
是find
通用系统中默认的“查找或操作”实用程序,还是系统会同时 find
带有和GNU find
?
是GNU find
为了更简单find
?
GNU 实用程序通常实现 POSIX 标准,然后还使用额外的功能对其进行扩展以增加便利性(另一方面,降低了跨 Unices 的可移植性)。可移植性方面是您有时会在此站点上看到答案或评论的原因,这些答案或评论非常小心地指出何时假定使用 GNU 实用程序或某些其他特定的实用程序实现。
如果您在 Linux 系统上,您很可能正在使用 GNU 实现
find
,并且您可能不会安装另一个find
。在非 Linux 系统上,您将拥有本机find
并且还可以安装 GNUfind
(通常以 GNU 名称安装,gfind
或者较少使用gnufind
.与大多数 GNU 实用程序一样,GNU
find
实现并扩展 了标准find
规范。因此,它不是“更简单”,而是可以说更复杂,以便更方便,并且使用它完成某些复杂的任务比使用严格符合标准的find
.经常的扩展实现
find
,例如,实现标准未提及的-maxdepth
and谓词,特别是 GNU 还必须使用各种格式化可能性(标准没有)打印找到的路径名,以及用于执行常规的谓词路径名上各种类型的表达式匹配,以及许多其他非标准谓词,其中一些也可以在其他实现中找到(可能具有略微不同的语义,例如根据所使用的内容略有不同1 )。-mindepth
find
-printf
find
-printf
find
-execdir
find
您链接到的答案中使用的
-delete
谓词是非标准的,但由 GNUfind
以及在find
其他一些非 Linux 系统上实现。如果您使用 GNU 删除非空目录, GNUfind
会-delete
报错,但 OpenBSD 等相应选项find
不会(也不会删除非空目录)。大多数 Linux 系统,无论发行版如何,都使用相同的 coreutils 和 findutils 工具集(很明显,存在诸如busybox之类的变体)。要使用一组完全不同的工具实现,您必须迁移到其中一个开源 BSD 系统或 macOS、Solaris、AIX 或其他一些商业 Unix。
1 GNU
find
在./
使用时会添加路径名,-execdir
而其他一些实现则不会。人们通常所说的 Linux 最好称为 GNU/Linux:Linux 加 GNU。因此,您使用的工具可能是 GNU。
因此,您可能正在使用 GNU find。
GNU 是一个可以重写的项目,一个免费的(自由的,而不是价格的)版本,所有 Unix,包括诸如 之类的工具
find
,GNU 项目不担心 POSIX 合规性:它会遵守有道理,但也会有所改进。此外,您假设只有一个
find
是错误的。