Zvažte některé běžné * nix systémy (řekněme Debian, CentOS, Arch a Kali).
Vždy used find
; Nepamatuji si použití GNU find, ale z jednoho příkladu jsem viděl, že jsem předpokládal, že syntaxe GNU find může být jednodušší (i když může povolit méně operací).
Mám dvě otázky:
-
Je
find
výchozí obslužný program „najít nebo provozovat“ v běžných systémech nebo budou systémy dodávány s oběmafind
aGNU find
? -
Byl
GNU find
mělo být jednodušší nežfind
?
Komentáře
Odpověď
Obslužné programy GNU často implementují standard POSIX a poté ho také rozšiřují o další funkce pro větší pohodlí (a na druhé straně to snížilo přenositelnost napříč Unices). Aspekt přenositelnosti je důvod, proč na tomto webu někdy uvidíte odpovědi nebo komentáře, které jsou velmi opatrné, když upozorníte, když se předpokládá nástroj GNU nebo nějaká jiná konkrétní implementace nástroje.
Pokud používáte systém Linux systému, velmi pravděpodobně použijete implementaci GNU find
a pravděpodobně byste neměli další find
nainstalován. V systémech jiných než Linux byste měli nativní find
a možnost nainstalovat také GNU find
(který by se nejčastěji instaloval pod name gfind
nebo méně často gnufind
).
Stejně jako u většiny nástrojů GNU, GNU find
implementuje a rozšiřuje standardní find
specifikaci . Není to tedy „jednodušší“, ale místo toho pravděpodobně složitější, aby to bylo pohodlnější, a bylo by o něco snazší provádět s ním určité složité úkoly než s přísně standardním find
.
Rozšířené implementace find
často například implementují -maxdepth
a -mindepth
predikáty, které standard nezmiňuje, a GNU find
zejména také -printf
pro tisk nalezených cest pomocí různé možnosti formátování (standardní find
nemá -printf
) a predikáty pro porovnávání regulárních výrazů různých druhů na cestách, stejně jako řada dalších nestandardních predikátů, z nichž některé se také nacházejí v jiných implementacích find
(možná s tak trochu odlišnou sémantikou, jako je -execdir
whi ch funguje mírně odlišně v závislosti na tom, co find
se používá 1 ).
-delete
použitý v odpovědi, na kterou odkazujete, je nestandardní, ale implementován GNU find
stejně jako v find
na některých jiných systémech jiných než Linux. GNU find
„s -delete
si bude stěžovat, pokud jej použijete k odstranění neprázdného adresáře, ale odpovídající možnost např. S OpenBSD find
nebude (nevymaže neprázdný adresář).
Většina systémů Linux, bez ohledu na distribuci, používá stejnou sadu nástrojů coreutils a findutils (varianty jako busybox samozřejmě existuje). Chcete-li použít úplně jinou sadu implementací nástrojů, budete muset přejít na některý z otevřených systémů BSD nebo na MacOS, Solaris, AIX nebo na nějaký jiný komerční Unix.
1 GNU find
předchází ./
před názvy cest při použití -execdir
při některé další implementace „t.
Komentáře
- And
-print0
a-direxec
a-delete
a … ;-). Možnosti nulového oddělovače dostupné v nástrojích GNU jsou obzvláště výhodné. - @StephenKitt Ale málokdy je potřeba 🙂
- správně, kromě případů, kdy sem píšete odpovědi jiné než POSIX ;-). (Nebo skripty, které musí fungovat kdekoli .)
- Hlavním problémem dokumentace GNU je, že se pokouší umožnit lidem používat nestandardní aliasy k metodám POSIX a způsobit tak související skripty pro vytvoření zámku dodavatele.
- @StephenKitt
-print0
je také k dispozici na * bsd a solaris; ale na solarisxargs -0
nefunguje ', takžegxargs -0
(z/usr/bin/sfw
).
Odpověď
Na co lidé často odkazují protože Linux se lépe označuje jako GNU / Linux: Linux plus GNU. Nástroje, které používáte, jsou proto pravděpodobně GNU.
- Linux: jádro, používá se v GNU / Linux, Android a mnoha dalších systémech.
- GNU: an operační systém, často používaný s linuxovým jádrem, ale lze jej použít také s BSD, Hurd, Cygwin (DLL pro Windows od Microsoftu, vydává se za jádro), WSL (Windows Subsystém pro Linux: GNU bez Linuxu, na Microsoft Windows), HPUX, Solaris, Dec Athena a mnoho dalších.
Proto pravděpodobně používáte GNU find.
GNU je projekt k re- napište bezplatnou (zdarma jako ve svobodě, ne jako v ceně) verzi celého Unixu, včetně nástrojů jako find
projekt GNU si nedělá starosti s dodržováním POSIX: Bude vyhovovat tam, kde to dává smysl, ale také vylepší.
Rovněž předpokládáte, že existuje pouze jeden další find
se mýlí.
find
na busyboxu nebo androidu 😉 Na systémech jiných než linux se GNU find obvykle jmenujegfind
.find --version
😉find
na těchto systémech je GNUfind
. '.