Harkitse joitain yleisiä * nix -järjestelmiä (sanovat Debian, CentOS, Arch ja Kali).
Olen aina käytetty find
; En muista GNU-haun avulla, mutta -esimerkistä olen nähnyt, että oletin, että GNU-löydön syntaksin voi olla yksinkertaisempi (vaikka saattaa sallia vähemmän toimintoja).
Minulla on kaksi kysymystä:
-
Onko
find
oletus ”etsi tai toimi” -apuohjelma tavallisissa järjestelmissä, vai tulevatko järjestelmät molempienfind
jaGNU find
? -
Oliko
GNU find
tarkoitti olevan yksinkertaisempi kuinfind
?
Kommentit
vastaus
GNU-apuohjelmat toteuttavat usein POSIX-standardin ja laajentavat sitä sitten myös lisätoiminnoilla mukavuuden lisäämiseksi (ja sen kääntöpuolena laski siirrettävyyttä Unices-laitteiden välillä). Siirrettävyys on se, miksi näet joskus tällä sivustolla vastauksia tai kommentteja, jotka ovat erittäin varovaisia huomauttamaan, kun oletetaan GNU-apuohjelma tai jokin muu erityinen apuohjelman toteutus.
Jos käytät Linuxia järjestelmässä hyvin todennäköisesti käyttäisit find
GNU-toteutusta, eikä sinulla todennäköisesti olisi toista find
asennettu. Muissa kuin Linux-järjestelmissä sinulla on natiivi find
ja mahdollisuus asentaa myös GNU find
(joka asennetaan useimmiten nimi gfind
tai harvemmin gnufind
).
Kuten useimmissa GNU-apuohjelmissa, GNU find
toteuttaa ja laajentaa standardin find
määrittelyä . Siksi se ei ole ”yksinkertaisempi”, vaan on epäilemättä monimutkaisempi, jotta se olisi mukavampaa, ja sen kanssa olisi jonkin verran helpompaa tehdä tiettyjä monimutkaisia tehtäviä kuin tiukasti standardin mukaisen find
.
Laajennetut find
-toteutukset toteuttavat usein esimerkiksi -maxdepth
ja -mindepth
predikaatit, joita standardi ei mainitse, ja erityisesti GNU find
-sisällöllä on myös -printf
tulostaa löydetyt polkut käyttämällä erilaisia muotoilumahdollisuuksia (vakiomallisessa find
ei ole -printf
), ja predikaatit suoritetaan säännöllisten lausekkeiden yhteensopivuus polkujen nimissä, samoin kuin joukko muita epätyypillisiä predikaatteja, joista joitain löytyy myös muilta find
-toteutuksilta (mahdollisesti aina niin vähän erilaisilla semantiikoilla, kuten -execdir
whi ch toimii hieman eri tavalla riippuen siitä, mitä find
käytetään 1 ).
-delete
predikaatti on epätyypillinen, mutta GNU find
ja find
joissakin muissa kuin Linux-järjestelmissä. GNU find
”s -delete
valittaa, jos käytät sitä tyhjän hakemiston poistamiseen, mutta vastaava vaihtoehto esim. OpenBSD” s find
ei (kumpikaan ei poista tyhjää hakemistoa).
Useimmat Linux-järjestelmät käyttävät jakelusta riippumatta samoja coreutils- ja findutils-työkalusarjoja (kuten busybox on tietysti olemassa). Jos haluat käyttää täysin erilaista työkalutoteutusta, sinun on siirryttävä johonkin avoimen lähdekoodin BSD-järjestelmistä tai macOS-, Solaris-, AIX- tai muuhun kaupalliseen Unixiin.
1 GNU find
valmistaa ./
polkuihin, kun -execdir
käytetään jotkut muut toteutukset eivät t.
Kommentit
- Ja
-print0
ja-direxec
ja-delete
, ja … ;-). GNU-työkaluissa käytettävissä olevat tyhjät erotinvaihtoehdot ovat erityisen käteviä. - @StephenKitt Mutta harvoin tarvitaan 🙂
- oikein, paitsi kun kirjoitetaan muita kuin POSIX-vastauksia tähän ;-). (Tai komentosarjoja, joiden on toimittava missä tahansa .)
- GNU-dokumentaation pääongelma on, että se yrittää antaa ihmisten käyttää epätyypillisiä aliaksia POSIX-menetelmiin ja aiheuttaa siten liittyvät komentosarjat toimittajan lukituksen luomiseen.
- @StephenKitt
-print0
on saatavana myös * bsd: ssä ja solarisissa; mutta solarisxargs -0
ei toimi ', jotengxargs -0
(osoitteesta/usr/bin/sfw
) tulisi käyttää sen sijaan.
Vastaa
Mitä ihmiset usein viittaavat koska Linuxia kutsutaan paremmin nimellä GNU / Linux: Linux plus GNU. Siksi käyttämäsi työkalut ovat todennäköisesti GNU.
- Linux: ydin, sitä käytetään GNU / Linuxissa, Androidissa ja monissa muissa järjestelmissä.
- GNU: an käyttöjärjestelmä, jota käytetään usein Linux-ytimen kanssa, mutta jota voidaan käyttää myös BSD: n, Hurdin, Cygwinin kanssa (DLL Microsoftin Windowsille, se teeskentelee olevan ydin), WSL: lle (Windows-alijärjestelmä Linuxille: GNU ilman Linuxia, Microsoftin Windows), HPUX, Solaris, Dec Athena ja monet muut.
Siksi käytät todennäköisesti GNU-hakua.
GNU on projekti uudelleen kirjoita, koko Unixin ilmainen (ilmainen kuin vapaudessa, ei kuten hinnassa) versio , mukaan lukien työkalut, kuten find
, GNU-projekti ei välitä POSIX-yhteensopivuudesta: Se noudattaa missä on järkevää, mutta tekee myös parannuksia.
Oletat myös, että on vain yksi muu find
on väärä.
find
-palvelun suuri käyttäjä busyboxissa tai androidissa 😉 Muissa kuin linux-järjestelmissä GNU-haku on yleensä nimeltäängfind
.find --version
😉find
-toteutus näissä järjestelmissä on GNUfind
.