-print0
spune găsi
pentru a scoate rezultatele separate prin octeți nuli în loc de caracterele obișnuite de tip newline. Acest lucru este necesar dacă numele fișierelor conțin (sau pot în viitor) să conțină caractere newline.
Atunci trebuie să spui xargs
să vă așteptați la date delimitate de valori nule care coboară pe conductă - asta este -0
este pentru. Deci este necesar aici când se utilizează -print0
pe LHS.
Între timp {}
este un șir de înlocuire - atunci când utilizați -Eu {}
, fiecare {}
în următoarea comandă va fi înlocuită cu un element de intrare. Este cu adevărat necesar doar atunci când aveți nevoie de control asupra locului în care apare elementul în următoarea linie de comandă (și are efectul secundar de a rula o singură invocare pentru fiecare articol, echivalent cu adăugarea -L 1
). IMHO, nu este necesar aici și face ca soluția să fie ineficientă, deoarece rulează rm
o dată pentru fiecare fișier găsit, în loc să fie în loturi.
Rețineți că găsi
are o -exec
opțiune și a -șterge
opțiune prin care ambele evită problema scrierii / citirii datelor delimitate cu totul:
găsi . -type f -not -name '*gz' -exec rm -v {} +
sau
găsi . -type f -not -name '*gz' -print -delete
(cel -imprimare
aici pentru a oferi o funcționalitate similară ca -v
opțiunea pentru rm
).