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:
-
find
az alapértelmezett “find or-and operation” segédprogram a közös rendszerekben, vagy a rendszerek mindkétfind
ésGNU find
? -
GNU find
egyszerűbbnek szántfind
?
Megjegyzések
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 solarisxargs -0
nem működik, ezértgxargs -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.
find
egyik nagy felhasználói a busyboxon vagy az androidon 😉 Nem linuxos rendszereken a GNU keresés általábangfind
.find --version
😉find
megvalósítás ezeken a rendszereken GNUfind
.