Fontoljon meg néhány gyakori * nix rendszert (mondjuk Debian, CentOS, Arch és Kali).

Mindig használt find; Nem idézem fel a GNU keresést, de egy példából láttam, hogy feltételeztem, hogy a GNU keresés szintaxisa egyszerűbb lehet (bár lehet, hogy kevesebb műveletet engedélyez).

Két kérdésem van:

  1. find az alapértelmezett “find or-and operation” segédprogram a közös rendszerekben, vagy a rendszerek mindkét find és GNU find?

  2. GNU find egyszerűbbnek szánt find ?

Megjegyzések

  • mindig használtad a GNU keresést a linuxon, hacsak nem ' a find egyik nagy felhasználói a busyboxon vagy az androidon 😉 Nem linuxos rendszereken a GNU keresés általában gfind.
  • Próbálja ki a find --version😉
  • Azok a rendszerek, amelyekre ' hivatkozik, a GNU rendszerek, a legtöbb számára GNU / Linux, bár a Debian más néhány kern számára is elérhető jól. Tehát ' nem meglepő, hogy a find megvalósítás ezeken a rendszereken GNU find.

Válasz

A GNU segédprogramok gyakran megvalósítják a POSIX szabványt, majd a további kényelem érdekében további funkciókkal bővítik (és ennek fordított oldalaként csökkent az Unices közötti hordozhatóság). A hordozhatóság miatt ezért valamikor olyan válaszokat vagy megjegyzéseket fog látni ezen a webhelyen, amelyek nagyon vigyáznak arra, hogy felhívják a figyelmet arra, amikor egy GNU segédprogramot vagy egy segédprogram egyéb specifikus megvalósítását feltételezik.

Ha Linux rendszerű vagy rendszer nagyon valószínűleg a find GNU-implementációját használja, és valószínűleg nincs másik find telepítve. Nem Linux rendszereken rendelkeznie kell natív find lehetőséggel, és lehetősége van a GNU find telepítésére is (amely leggyakrabban a név gfind vagy ritkábban gnufind).

Mint a legtöbb GNU segédprogram esetében, a GNU find végrehajtja és kiterjeszti a szokásos find specifikációt . Ezért nem “egyszerűbb”, hanem vitathatatlanul összetettebb, hogy kényelmesebb legyen, és valamivel könnyebb lenne vele bizonyos komplex feladatokat elvégezni, mint szigorúan szabványnak megfelelő find .

A find kiterjesztett implementációi gyakran például a -maxdepth és predikátumokat, amelyeket a szabvány nem említ, és különösen a GNU find is rendelkezik -printf -vel, hogy a megtalált útvonalneveket kinyomtassa sokféle formázási lehetőség (a szokásos find nem rendelkezik -printf), és predikátumokat tartalmaz a rendszeres kifejezés-illesztéshez különféle típusú elérési útvonalakon, valamint számos más nem szabványos predikátum, amelyek némelyike megtalálható a find egyéb megvalósításaiban is (esetleg valaha ennyire kissé eltérő szemantikával, például -execdir whi A ch kissé eltérően működik, attól függően, hogy mit használ a find 1 ).

A -delete predikátum nem szabványos, de a GNU find, valamint a find néhány más, nem Linux rendszeren. A GNU find “s -delete panaszt fog tenni, ha nem üres könyvtár törlésére használja, de a megfelelő opció pl. OpenBSD” s A find nem fogja (és a nem üres könyvtárat sem törli).

A legtöbb Linux rendszer, disztribúciótól függetlenül, ugyanazt a coreutils és findutils eszközkészletet használja (pl. busybox létezik, nyilván). Az eszközmegvalósítások teljesen más készletének használatához át kell költöznie valamelyik nyílt forráskódú BSD rendszerbe, vagy a macOS, Solaris, AIX vagy más kereskedelmi Unix rendszerbe.


1 GNU find előkészíti a ./ útvonalneveket, amikor -execdir -t használ néhány más megvalósítás ne “t.

Megjegyzések

  • És -print0 és -direxec és -delete, és … ;-). A GNU eszközökben elérhető null elválasztó opciók különösen kényelmesek.
  • @StephenKitt De ritkán szükség van rá 🙂
  • helyesen, kivéve, ha nem POSIX válaszokat írunk ide ;-). (Vagy olyan szkriptek, amelyeknek bárhol működniük kell.)
  • A GNU dokumentációjának fő problémája, hogy megpróbálja hagyni az embereket nem szabványos álnevek használatával a POSIX módszerekhez, és ezáltal a kapcsolódó szkriptek a szállítói zárolásának létrehozásához.
  • @StephenKitt -print0 a * bsd és a solaris rendszereken is elérhető; de a solaris xargs -0 nem működik, ezért gxargs -0 (/usr/bin/sfw) kell használni.

Válasz

Amire az emberek gyakran hivatkoznak mivel a Linuxot jobban nevezik GNU / Linuxnak: Linux plusz GNU. Ezért az Ön által használt eszközök valószínűleg GNU-k.

  • Linux: kernel, GNU / Linux, Android és sok más rendszerben használják.
  • GNU: an operációs rendszer, amelyet gyakran használnak a Linux kernellel, de használható BSD, Hurd, Cygwin (DLL a Microsoft Windows számára, úgy tesz, mintha kernel lenne), WSL (Windows alrendszer Linux számára: GNU Linux nélkül, A Microsoft Windows), a HPUX, a Solaris, a Dec Athena és még sokan mások.

Ezért valószínűleg a GNU keresést használja.

A GNU egy új projekt írjon, az összes Unix ingyenes (ingyenes, mint a szabadságban, nem úgy, mint az árban) verziója , beleértve az olyan eszközöket is, mint a find, a GNU projekt nem aggódik a POSIX megfelelés miatt: Megfelel, ha van értelme, de javítani is fog.

Azt is feltételezi, hogy csak egy másik van find hibás.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük