find 和 GNU 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
而其他一些實現則不會。