Find

find 和 GNU find 之間的區別

  • June 13, 2019

考慮一些常見的 *nix 系統(比如 Debian、CentOS、Arch 和 Kali)。

我一直用find;我不記得使用過 GNU find,但是從我看到的一個範例中,我假設 GNU find 的語法可能更簡單(儘管可能允許更少的操作)。

我有兩個問題:

  1. find通用系統中預設的“查找或操作”實用程序,還是系統會同時 find帶有和GNU find
  2. GNU find為了更簡單find

GNU 實用程序通常實現 POSIX 標準,然後還使用額外的功能對其進行擴展以增加便利性(另一方面,降低了跨 Unices 的可移植性)。可移植性方面是您有時會在此站點上看到答案或評論的原因,這些答案或評論非常小心地指出何時假定使用 GNU 實用程序或某些其他特定的實用程序實現。

如果您在 Linux 系統上,您可能正在使用 GNU 實現find,並且您可能不會安裝另一個find。在非 Linux 系統上,您將擁有本機find並且還可以安裝 GNU find(通常以 GNU 名稱安裝,gfind或者較少使用gnufind.

與大多數 GNU 實用程序一樣,GNUfind實現並擴展 了標準find規範。因此,它不是“更簡單”,而是可以說更複雜,以便更方便,並且使用它完成某些複雜的任務比使用嚴格符合標準的find.

經常的擴展實現find,例如,實現標準未提及的-maxdepthand謂詞,特別是 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 GNUfind./使用時會添加路徑名,-execdir而其他一些實現則不會。

引用自:https://unix.stackexchange.com/questions/475020