Overvej nogle almindelige * nix-systemer (siger Debian, CentOS, Arch og Kali).

Jeg har altid brugt find; Jeg kan ikke huske at bruge GNU find, men fra et eksempel Jeg har set, antog, at syntaksen for GNU find kunne være enklere (skønt muligvis tillader færre handlinger).

Jeg har to spørgsmål:

  1. Er find standardværdien “find or-and manage” i almindelige systemer, eller vil systemer komme med begge find og GNU find?

  2. Var GNU find beregnet til at være enklere at find ?

Kommentarer

  • du har altid brugt GNU find på linux, medmindre du ' er en stor bruger af find på busybox eller android 😉 På ikke-linux-systemer kaldes GNU find normalt gfind.
  • Prøv find --version😉
  • De systemer, du ' henviser til, er GNU-systemer, GNU / Linux for de fleste, selvom Debian er tilgængelig for andre et par andre kerner som godt. Så det ' er ikke overraskende, at find implementeringen på disse systemer er GNU find.

Svar

GNU-værktøjer implementerer ofte POSIX-standarden og udvider den også med ekstra funktionalitet for ekstra bekvemmelighed (og som bagsiden af det, nedsat bærbarhed på tværs af enheder). Bærbarhedsaspektet er, hvorfor du engang vil se svar eller kommentarer på dette websted, der er meget omhyggelige med at påpege, når der antages et GNU-værktøj eller en anden specifik implementering af et hjælpeprogram.

Hvis du er på en Linux system, ville du meget sandsynligvis bruge GNU-implementeringen af find, og du ville sandsynligvis ikke have en anden find installeret. På ikke-Linux-systemer ville du have en indfødt find og muligheden for også at installere GNU find (som oftest installeres under navn gfind eller mindre ofte gnufind).

Som med de fleste GNU-værktøjer, GNU find implementerer og udvider standard find specifikation . Det er derfor ikke “enklere” men i stedet uden tvivl mere komplekst for at være mere praktisk, og det ville være noget lettere at udføre visse komplekse opgaver med det end med en strengt standardkompatibel find .

Udvidede implementeringer af find ofte f.eks. implementerer -maxdepth og -mindepth forudsigelser, som standarden ikke nævner, og især GNU find har også -printf til at udskrive de fundne vejnavne ved hjælp af en række formateringsmuligheder (standarden find har ikke -printf), og forudsigelser til at foretage regelmæssig ekspressionstilpasning af forskellige slags på stienavne samt et antal andre ikke-standardprædikater, hvoraf nogle også findes i andre implementeringer af find (muligvis med nogensinde så lidt forskellige semantik, som -execdir whi ch fungerer lidt anderledes afhængigt af hvad find bruges 1 ).

-delete predikat, brugt i svaret, som du linker til, er ikke-standard, men implementeret af GNU find såvel som i find på nogle andre ikke-Linux-systemer. GNU find “s -delete klager, hvis du bruger den til at slette en ikke-tom mappe, men den tilsvarende mulighed med f.eks. OpenBSD” s find vil ikke (hverken slette den ikke-tomme mappe).

De fleste Linux-systemer, uanset distribution, bruger de samme kerneværktøjer og findutils værktøjssæt (varianter som busybox eksisterer naturligvis). Hvis du vil bruge et helt andet sæt værktøjsimplementeringer, skal du flytte til et af open source BSD-systemer eller til macOS, Solaris, AIX eller en anden kommerciel Unix.


1 GNU find forudser ./ til stienavne, når du bruger -execdir mens nogle andre implementeringer gør ikke det.

Kommentarer

  • Og -print0 og -direxec, og -delete, og … ;-). De null-separatorindstillinger, der er tilgængelige i GNU-værktøjer, er særligt praktiske.
  • @StephenKitt Men sjældent nødvendigt 🙂
  • rigtigt, undtagen når man skriver ikke-POSIX-svar her ;-). (Eller scripts, der skal arbejde hvor som helst .)
  • Hovedproblemet med GNU-dokumentationen er, at det forsøger at lade folk bruge ikke-standardaliaser til POSIX-metoder og dermed forårsage relaterede scripts til oprettelse af en leverandørlås.
  • @StephenKitt -print0 er også tilgængelig på * bsd og solaris; men på solaris fungerer xargs -0 ikke ' t, så gxargs -0 (fra /usr/bin/sfw) skal bruges i stedet.

Svar

Hvad folk ofte henviser til da Linux betegnes bedre som GNU / Linux: Linux plus GNU. Derfor er de værktøjer, du bruger, sandsynligvis GNU.

  • Linux: en kerne, den bruges i GNU / Linux, Android og mange andre systemer.
  • GNU: en operativsystem, ofte brugt med Linux-kernen, men kan også bruges med BSD, Hurd, Cygwin (en DLL til Microsofts Windows, det foregiver at være en kerne), WSL (Windows Subsystem til Linux: GNU uden Linux, på Microsofts Windows), HPUX, Solaris, Dec Athena og mange andre.

Derfor bruger du sandsynligvis GNU find.

GNU er et projekt at gentage skriv, en Gratis (gratis som i frihed, ikke som i pris) version af hele Unix, inklusive værktøjer såsom find, GNU-projektet bekymrer sig ikke om POSIX-overholdelse: Det vil overholde, hvor det giver mening, men vil også foretage forbedringer.

Du antager også, at der kun er en anden find er forkert.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *