find 和 GNU find 之间的区别

find 和 GNU find 之间的区别

考虑一些常见的 *nix 系统(例如 Debian、CentOS、Arch 和 Kali)。

我一直用find;我不记得使用过 GNU find,但是来自一个例子我发现我假设 GNU find 的语法可能更简单(尽管可能允许较少的操作)。

我有两个问题:

  1. find常见系统中默认的“查找或操作”实用程序还是系统附带两个都 findGNU find

  2. 曾是GNU find故意的更简单吗find

答案1

GNU 实用程序通常实现 POSIX 标准,然后还通过额外的功能对其进行扩展以增加便利性(但另一方面,也降低了 Unices 之间的可移植性)。可移植性方面就是为什么您有时会在此站点上看到答案或评论,这些答案或评论非常仔细地指出何时假设使用 GNU 实用程序或实用程序的某些其他特定实现。

如果你使用的是Linux系统,你会非常可能正在使用 的 GNU 实现find,并且您可能不会find安装另一个。在非 Linux 系统上,您将拥有本机find并且还可以安装 GNU find(通常会以名称安装gfind,或者较少使用gnufind)。

与大多数 GNU 实用程序一样,GNUfind实现并延伸 标准find规格。因此,它并不是“更简单”,而是为了更方便而更复杂,并且用它来完成某些复杂的任务比使用严格符合标准的find.

find例如,扩展实现通常会实现标准未提及的-maxdepth和谓词,特别是 GNU 还必须使用各种格式可能性(标准没有)打印找到的路径名,以及用于执行常规操作的谓词路径名上各种类型的表达式匹配,以及许多其他非标准谓词,其中一些也可以在其他实现中找到(可能具有稍微不同的语义,就像根据所使用的内容而工作略有不同) 1 ).-mindepthfind-printffind-printffind-execdirfind

您链接到的答案中使用的谓词-delete是非标准的,但由 GNUfind以及find其他一些非 Linux 系统实现。如果您使用它来删除非空目录, GNUfind-delete抱怨,但 OpenBSD 等相应选项find不会(也不会删除非空目录)。

大多数 Linux 系统,无论发行版如何,都使用相同的 coreutils 和 findutils 工具集(显然存在 busybox 等变体)。要使用一组完全不同的工具实现,您必须迁移到一个开源 BSD 系统或 macOS、Solaris、AIX 或其他一些商业 Unix。


1 GNU在使用时会在路径名前面加上find前缀,而其他一些实现则不会。./-execdir

答案2

人们通常所说的 Linux 更适合称为 GNU/Linux:Linux 加 GNU。因此,您使用的工具可能是 GNU。

  • Linux:一个内核,它用于 GNU/Linux、Android 和许多其他系统。
  • GNU:一种操作系统,通常与 Linux 内核一起使用,但也可以与 BSD、Hurd、Cygwin(Microsoft Windows 的 DLL,它伪装成内核)、WSL(Windows Subsystem for Linux:没有 Linux 的 GNU)一起使用, Microsoft Windows)、HPUX、Solaris、Dec Athena 等。

因此您可能正在使用 GNU find。

GNU 是一个重写的项目,免费(免费是指自由,而不是价格)版本对于所有 Unix,包括诸如 之类的工具find,GNU 项目并不担心 POSIX 合规性:它将在有意义的地方合规,但也会做出改进。

另外,您认为只有一个的假设find是错误的。

相关内容