Transmiterea parametrilor la o functie Evaluarea expresiilor Expresii

  • Slides: 31
Download presentation
Transmiterea parametrilor la o functie Evaluarea expresiilor Expresii regulate Comanda grep Comanda find

Transmiterea parametrilor la o functie Evaluarea expresiilor Expresii regulate Comanda grep Comanda find

 • Transmiterea parametrilor la o functie • O functie poate primi parametri ca

• Transmiterea parametrilor la o functie • O functie poate primi parametri ca orice script. Functiile pot folosi variabilele de mediu. Numele functiei este definit in variabila $0; ceilalti parametri din linia de comanda a apelului functiei substituie $1, $2, . . . De as. , se poate utiliza variabila speciala $#, care contine numarul parametrilor transmisi functiei. • Cind se apeleaza o functie intr-un script, numele functiei si argumentele trebuie sa se afle pe aceeasi linie de comanda. • Exemplu: func 1 $value 1 10 func 1 este numele functiei, $value, 1, 10 vor substitui pe $1, $2, $3 in corpul functiei. • Exemplu: $ cat >test 6 function addem { if [ $# -eq 0 ] || [ $# -gt 2 ] then echo -1 elif [ $# -eq 1 ] then echo $[ $1 + $1 ] else echo $[ $1 + $2 ] fi }

echo -n "Adding 10 and 15: " value=`addem 10 15`; echo $value echo –n

echo -n "Adding 10 and 15: " value=`addem 10 15`; echo $value echo –n "Let’s try adding just one nr. : " value=`addem 10` echo $value echo -n "Now trying adding no numbers: " value=`addem` echo $value echo -n "Finally, try adding three numbers: " value=`addem 10 15 20` echo $value $. /test 6 Adding 10 and 15: 25 Let’s try adding just one number: 20 Now trying adding no numbers: -1 Finally, try adding three numbers: -1 $ • Functia addem din scriptul anterior, mai intii verifica numarul parametrilor care ii sunt transmisi de catre script. Daca nr. parametrlor transmisi este diferit de 2, se returneaza valoarea -1. Daca nr. param. este 1, valoarea este dublata, iar daca este 2, se aduna cei doi.

 • • Manipularea variabilelor intr-o functie Domeniul de vizibilitate al variabilelor poate fi

• • Manipularea variabilelor intr-o functie Domeniul de vizibilitate al variabilelor poate fi global sau local. Variabilele globale sunt valide oriunde in interiorul scriptului. Intrucat pot exista conflicte la denumirea variabilelor (in mod normal variabilele folosite in script sunt vizibile si in functii), putem folosi variabile care sunt vizibile doar in interiorul functiei, declarandu-le cu local (ori in cazul vectorilor cu local -a). • Exemplu. Folosirea unei variabile globale pt. a transm. o valoare $cat >test 8 function dbl { value=$[ $value * 2 ] } read -p "Enter a value: " value dbl echo "The new value is: $value" $. /test 8 Enter a value: 450 The new value is: 900 $

 • Variabila $value este definita in afara functiei si este asignata tot in

• Variabila $value este definita in afara functiei si este asignata tot in afara functiei. • Cind este apelata functia dbl, variabila si valoarea ei sunt inca valide in interiorul functiei. • Cind variabilei ii este asignata o noua valoare in interiorul functiei, acea noua valoare este valida cind script-ul referentiaza variabila. • Acest lucru poate fi periculos, in special atunci cind o functie este utilizata in diferite script-uri. • Exemplu. Utilizarea proasta a variabilelor $cat >badtest 2 function func 1() { temp=$[ $value + 5 ] result=$[ $temp * 2 ] } temp=4; value=6; func 1; echo "The result is $result" if [ $temp -gt $value ] then echo "temp is larger" else echo "temp is smaller" fi •

 • • • $. /badtest 2 The result is 22 temp is larger

• • • $. /badtest 2 The result is 22 temp is larger $ Deoarece variabila $temp a fost folosita in cadrul functiei, valoarea ei este compromisa in script, producind un rezultat neintentionat. Aceasta problema este rezolvata prin folosirea variabilelor locale. Variabilele locale pot fi specificate cu declaratia local, prezentata anterior. Aceasta declaratie poate fi folosita si intr-o comanda de asignare. Exemplu. local temp=$[ $value + 5 ] Daca o variabila locala este utilizata in afara functiei, shell-ul pastreaza doua valori separate ale variabilei.

 • Exemplu: $cat >test 9 function func 1 { local temp=$[ $value +

• Exemplu: $cat >test 9 function func 1 { local temp=$[ $value + 5 ] result=$[ $temp * 2 ] } temp=4; value=6; func 1; echo "The result is $result" if [ $temp -gt $value ] then echo "temp is larger" else echo "temp is smaller" fi $. /test 9 The result is 22 temp is smaller $ Folosirea variabilei $temp in interiorul functiei func 1 nu afecteza valoarea asignata variabilei $temp din script.

 • Variabile vector. Un vector se declara si se initializeaza specificind elementele sale

• Variabile vector. Un vector se declara si se initializeaza specificind elementele sale intre doua paranteze rotunde, separate prin caracterul spatiu. • Exemplu: $mytest=(one two three four five) • Valorile indicelui sunt 0, 1, 2, … • Referinta la un element al vectorului se face specificind numele vectorului si indicele intre paranteze drepte. • Exemplu: $echo ${mytest[2]} three • Exemplu: $echo $mytest one • Pt. a afisa tot vectorul, in pozitia indicelui trebuie specificat caracterul *. • Exemplu: $echo ${mytest[*]} one two three four five

 • Se poate modifica val. unui element al vectorului printr-o instr. de atribuire.

• Se poate modifica val. unui element al vectorului printr-o instr. de atribuire. • Exemplu: $mytest[2]=seven $echo ${mytest[*]} one two seven four five • Putem folosi comanda unset pentru a sterge cont. unui elem. al tabloului. • Exemplu: $unset mytest[2] $echo ${mytest[*]} one two four five $echo ${mytest[2]} $echo ${mytest[3]} four • Se poate sterge un intreg vector, daca acesta este argument al unei comenzi unset. • Exemplu: $unset mytest $echo ${mytest[*]}

 • Transmiterea vectorilor ca argumente la o functie • Transmiterea unui vector ca

• Transmiterea vectorilor ca argumente la o functie • Transmiterea unui vector ca un singur parametru poate genera eroare. Variabila de mediu $@ contine parametrii transmisi corep. lui $1, …. Reamintim ca $0 se substituie cu numele scriptului(functiei). Daca incercam sa transmitem un vector ca arg. al func. , functia va prelua numai prima comp. a vectorului. Exemplu: $cat >badtest 3 function testit { echo "The parameters are: $@" thisarray=$1; echo "The received array is ${thisarray[*]}" } myarray=(1 2 3 4 5) echo "The original array is: ${myarray[*]}" testit $myarray $. /badtest 3 The original array is: 1 2 3 4 5 The parameters are: 1. /badtest 3: thisarray[*]: bad array subscript The received array is

 • Ptr. a rezolv. aceasta problema, trebuie sa dezasamblam variabiala vector in componentele

• Ptr. a rezolv. aceasta problema, trebuie sa dezasamblam variabiala vector in componentele ei si apoi sa folosim valorile ca parametri ai functiei. In interiorul functiei, putem reasambla toti parametri intr-un nou vector • Exemplu: $ cat >test 10 function testit { local newarray=(`echo "$@"`) echo "The new array value is: ${newarray[*]}" } myarray=(1 2 3 4 5) echo "The original array is ${myarray[*]}" testit ${myarray[*]} $. /test 10 The original array is 1 2 3 4 5 The new array value is: 1 2 3 4 5 $ • Scriptul foloseste variabila $myarray pe care o transmite functiei, si in cadrul functiei se construieste un nou tablou newarray.

 • Exemplu: Suma componentelor unui vector. $ cat >test 11 function addarray {

• Exemplu: Suma componentelor unui vector. $ cat >test 11 function addarray { local sum=0 local newarray=(`echo "$@"`) for value in ${newarray[*]} do sum=$[ $sum + $value ] done echo $sum } myarray=(1 2 3 4 5) echo "The original array is: ${myarray[*]}" arg 1=`echo ${myarray[*]}` result=`addarray $arg 1` echo "The result is $result" $. /test 11 The original array is: 1 2 3 4 5 The result is 15

 • Returnarea vectorilor de catre o functie. Functia foloseste o comanda echo, ptr.

• Returnarea vectorilor de catre o functie. Functia foloseste o comanda echo, ptr. a transmite ca iesiri valorile comp. individuale vectorului, in ordinea coresp. si apoi scriptul le reasambleaza intr-o noua variabila tablou. : $cat >test 12 function arraydblr { local origarray; local newarray; local elements; local i origarray=(`echo "$@"`); newarray=(`echo "$@"`) elements=$[ $# - 1 ] for (( i = 0; i <= $elements; i++ )) { newarray[$i]=$[ ${origarray[$i]} * 2 ] } echo ${newarray[*]} } myarray=(1 2 3 4 5) echo "The original array is: ${myarray[*]}" arg 1=`echo ${myarray[*]}` result=(`arraydblr $arg 1`) echo "The new array is: ${result[*]}" $. /test 12 The original array is: 1 2 3 4 5 The new array is: 2 4 6 8 10

 • Scriptul transmite valorile comp. vectorului, folosind variable $arg 1, catre functia arraydblr.

• Scriptul transmite valorile comp. vectorului, folosind variable $arg 1, catre functia arraydblr. Functia arraydblr reasambleaza vectorul intr-o voua variabila vector si face o copie a variabilei vector. • Apoi, parcurge componentele vectorului, le dubleaza si le plaseza intr-o copie a variabilei vector din cadru functiei. • Functia arraydblr foloseste c-da echo pentru a transmite ca iesiri valorile individuale componentelor vectorului. • Scriptul foloseste iesirea functiei arraydblr pe care o reasambleaza intr-un nou vector.

 • Functii recursive. • Exemplu: Factorialul unui numar. $ cat >test 13 function

• Functii recursive. • Exemplu: Factorialul unui numar. $ cat >test 13 function factorial { if [ $1 -eq 1 ] then echo 1 else local temp=$[ $1 - 1 ] local result=`factorial $temp` echo $[ $result * $1 ] fi } read -p "Enter value: " value result=`factorial $value` echo "The factorial of $value is: $result“ $. /test 13 Enter value: 5 The factorial of 5 is: 120 $

Expresii regulate - au rolul de a specifica mulţimi de şiruri de caractere. -

Expresii regulate - au rolul de a specifica mulţimi de şiruri de caractere. - stabilesc un şablon pentru potriviri de text. - Expresiile regulate mai complexe se vor forma fie prin concatenare (scriere una dupa alta) fie cu ajutorul operatorilor ce vor fi descrisi mai jos. • În expresiile regulate se utilizează două tipuri de caractere: - caractere alfanumerice, care desemnează exact caracterele reprezentate; - caractere speciale sau operator care desemnează repetiţii, alegeri, opţiuni, etc.

 • Caractere speciale. •  Caracter de protejare - anulează semnificaţia specială a

• Caractere speciale. • Caracter de protejare - anulează semnificaţia specială a caracterului care îl urmează. • Punctul (. ) se potriveste cu orice caracter ( unul singur) Exemplu. a. z Aceasta expresie regulata se potriveste cu orice sir de caractere ce contine literele 'a' si 'z' intre care se gaseste orice caracter, cum ar fi: "axz", "aaz", dar nu "abcz". • [s] Desemnează o mulţime de caractere. În mulţimea s singurele caractere speciale sunt: -, ] si ^. Se pot specifica intervale intregi de tipul [c 1 -c 2], considerind ordinea ASCII a caracterelor, adica toate caracterele dintre c 1 si c 2. • Exemple. [abc] specifica unul dintre caracterele a, b sau c. [A-Za-z] specifica o litera mare sau mica. [][] specifica unul dintre caracterele ']' sau '['.

 • Dacă este la început, caracterul '^' complementează o mulţime, . Exemple. [^0

• Dacă este la început, caracterul '^' complementează o mulţime, . Exemple. [^0 -9] specifica un caracter nenumeric 3[^6890] reprezinta o expresie regulata ce se potriveste cu orice sir ce cont. cifra 3 si nu contine pe pozitia urmatoare una din cifrele 6, 8, 9 sau 0 Obs. Daca in sirul caruia i se aplica expresia regulata nu contine dupa 3 nici un alt caracter, expresia nu se va potrivi. * + Operatori de repetiţie: a* orice număr de caractere a, chiar 0; a+ orice număr de caractere a, cel puţin unul. • Parantezele rotunde se folosesc pentru a grupa expresiile regulate. • Exemplu. Daca scriem ab* aceasta semnifica un a urmat de oricate b-uri (inclusiv nici unul) ; dar daca scriem (ab)* operatorul * se aplica grupului, semnificatia fiind 0 sau mai multe repetitii ale sirului de caractere ab. • $ La sfâşitul unei expresii regulate, marchează un sfârşit de linie. • ^ La începutul unei expresii regulate marchează început de linie.

 • O secvenţa de caractere dintr-o expresie regulată se poate delimita prin '('

• O secvenţa de caractere dintr-o expresie regulată se poate delimita prin '(' şi ')'. • Pentru expresii regulate marcate, utilitarele awk şi egrep acceptă construcţii de forma: (expr)* Zero sau mai multe apariţii ale expresiei regulate (expr)+ Una sau mai multe apariţii ale expresiei regulate. (expr)? Zero sau o apariţie a expresiei regulate. • Operatorul de alternare. Două expresii regulate separate prin '|' semnifică una dintre ele (alternativa); a|b identifica a sau b • Expresiile regulate între paranteze simple realizează o grupare. • Exemplu: (a|b)(c|d) identifica ac, ad, bc sau bd. • Exemplu: (ab|cd+)? (ef)* Pe prima poziţie apare sau nu: ab sau c urmat de cel puţin un d, şi urmat de oricâte grupuri de ef.

 • Toate caracterele situate între " " îşi pierd semnificaţia specială. • /

• Toate caracterele situate între " " îşi pierd semnificaţia specială. • / Indică contextul următor. • Exemplu: ab/cd este ab doar dacă este urmat de cd. { } Semnifică repetiţii ale unei expresii. • Exemple: a{1, 5} Una până la cinci apariţii ale lui a. exp{6, } Cel puţin 6 apariţii ale expresiei exp{2} Exact două apariţii ale expresiei exp. [0 -9]{2, } Secvenţă din două sau mai multe cifre. • Dacă mai multe caractere speciale apar într-o expresie regulată, se aplică regula de precedenţă. Conform acesteia, precedenţa cea mai mare o au [ ] după care grupul *, + şi ? şi ultimul este |. • La înlocuirea şirurilor de caractere specificate prin expresii regulate, caracterul '&' identifică expresia regulată (sablonul gasit). Pentru a genera caracterul '&' acesta trebuie prefixat de . • Caracterul '' urmat de <Enter> generează o linie nouă.

Comanda grep • Are cel putin un parametru, care va fi interpretat ca expresie

Comanda grep • Are cel putin un parametru, care va fi interpretat ca expresie regulata. Liniile citite de la intrarea standard (sau din fisierele date ca parametri) care se potrivesc cu expresia regulata data, vor fi luate in consideratie. • Optiuni: -i nu face diferentele dintre literele mari si cele mici -v tipareste liniile cu care sablonul dat nu se potriveste -n tipareste numarul liniei, urmat de caracterul : , urmat de continutul liniei -E folosirea expresiilor regulate extinse (in mod normal se folosesc niste expresii regulate cu sintaxa foarte simpla); exista comanda egrep care e echivalenta cu grep -E -x tipareste doar liniile pentru care se potriveste intreaga linie cu tiparul dat, nu cu un subsir al acesteia -c tipareste doar numarul de linii ce s-ar fi afisat in mod normal -h Nu returneaza numele de fisiere. -l Listeaza numai numele de fisiere, nu textul care se potriveste. -q Verifica numai codul de iesire al programului. -s Suprima mesajele de eroare.

 • Exemple. • Afis. toate liniile care incep cu Prim si se sfarsesc

• Exemple. • Afis. toate liniile care incep cu Prim si se sfarsesc cu Ultim, indiferent de numarul spatiilor albe de la inceput si de la sfarsit. $cat fisier|grep '^*Prim. *Ultim. *$’ • Numararea liniillor care incep cu litera mica. $grep -c ^[a-z] fisier • Presupunem ca directorul Biblioteca/src cotine fisierele java. Numararea fisierelor java care se afla in director se face cu: $ls -R | grep -c. java • Numararea liniile de comentariu scrise in toate fisierele sursa java se face cu: $cat `find src -name *. java -print` | grep [^A-Zaz 0 -9]/[^A-Za-z 0 -9] | wc –l • Afisarea tuturor metodelor care returneaza date de tip int, dar nu date de tipul int[]. $cat `find src -name *. java`|grep'public int'. *') {'

Comanda find • Realizează căutarea într-o structură de directoare, specificând numele directorului(calea), criteriul de

Comanda find • Realizează căutarea într-o structură de directoare, specificând numele directorului(calea), criteriul de căutare şi opţional acţiunea care se execută asupra fişierelor găsite. Sintaxă: find lista-cale expresii • Căutarea prin nume se face cu opţiunea -name • Exemplu. $ find / -name fisier va lista toate fişierele din sistem al căror nume este fisier ; această comandă va căuta în toate directoarele la care este permis accesul; dacă nu este permis accesul se va semnala acest lucru. • Opţiunea -name este “case sensitive”; se foloseşte opţiunea -iname dacă nu se face distinţie între literele mari şi cele mici. De exemplu: $ find / -iname fisier va include în rezultatul căutării şi Fisier sau f. Isier , • În căutarea fişierelor se pot folosi şi şabloane şi în acest caz numele de fişier este specificat între apostroafe. De exemplu: $ find / -name ‘fis*’ listează toate fişierele din sistem al căror nume începe cu caracterele `fis’. • $ find / -name ‘fis? ? ? ’ • listează toate fişierele din sistem al căror nume începe cu caracterele `fis’, urmate de trei caractere oarecare.

$ find /usr/share -name ‘*fis*’ listează toate fişierele din structura care porneşte din directorul

$ find /usr/share -name ‘*fis*’ listează toate fişierele din structura care porneşte din directorul /usr/share cu textul fis inclus în nume. • Se foloseşte -regex în locul lui -name pentru a face căutarea pentru fişiere al căror nume trebuie să îndeplinească un şablon definit printr-o expresie regulată $ find. -regex `. *(net|comm). *` listează toate fişierele din structura care porneşte din directorul curent al căror nume contine şirurile `net` sau `comm` oriunde în numele lor. • Căutarea fişierelor după dimensiune se face cu opţiunea -size, urmată de un număr natural, opţional precedat de un semn. Avem trei cazuri: când este precedat de semnul `+`, rezultatul căutării va fi toate fişierele care au dimensiunea mai mare decât numărul dat; când este precedat de semnul `-`, vor fi selectate toate fişierele a căror dimensiune este mai mică decât numărul dat; când nu este specificat nici un semn rezultatul va consta din toate fişierele care au exact aceeaşi dimensiune. Unitatea implicită este blocul de 512 baiţi; dacă numărul specificat anterior este urmat de caracterul `k`, respectiv `b' atunci unitatea de măsură este kilobaitul, respectiv baitul.

 • Exemple: $ find /usr/local -size +1000 k va lista toate fiş. din

• Exemple: $ find /usr/local -size +1000 k va lista toate fiş. din struct. care porneşte din dir. /usr/local care au mai mult de 10, 00 kilo. $ find ~ -size -500 b va lista toate fişierele din structura care porneşte din dir. gazdă care au o dimensiune mai mică de 500 baiţi $ find / -size 42 va lista toate fişierele din sistem care au o dim. de 42 de blocuri a câte 512 baiţi. Se fol. opţiunea –empty pentru a se găsi toate fişierele de dimensiune nulă. $ find ~ -empty va afişa toate fişierele vide din structura care porneşte din directorul gazdă. • Căutarea fişierelor după momentul modificării. Pentru a găsi fişiere modificate într-un interval de timp specificat, se folosesc opţ. -mtime sau -mmin; argumentul folosit cu -mtime specifică numărul de zile, pe când cel cu -mmin specifică nr. de minute. • Exemple: $ find /usr/local -mtime 1 va lista toate fişierele din structura care porneşte din dir. /usr/local care au fost modif. în ultimele 24 de ore. $ find /usr -mmin 5 va lista toate fişierele din structura care porneşte din directorul /usr care au fost modificate în ultimele 5 minute.

 • Pentru a specifica un interval de timp, numărul utilizat ca argument, va

• Pentru a specifica un interval de timp, numărul utilizat ca argument, va fi precedat de semnul `+', respectiv `-', având semnificaţia selectării tuturor fişierelor pentru care timpul de la ultima modificare este mai mare sau egal, respectiv mai mic sau egal decât argumentul specificat. • Exemple: $ find /usr/local -mtime -1 va afişa toate fişierele din structura care porneşte din directorul /usr/local care au fost modificate în ultimele 24 de ore. • $ find /usr -mmin -5 va lista toate fişierele din structura care porneşte din directorul /usr care au fost modificate în ultimele 5 minute. • Opţiunea -daystart va specifica faptul că contorizarea timpului se va face începând din ziua curentă, în loc de ziua trecută • Exemple: • $ find ~ -mtime 2 -daystart va lista toate fişierele din structura care porneşte din directorul gazdă care au fost modificate de acum două zile. • $ find /usr -mtime +356 -daystart va lista toate fişierele din directorul structura care porneşte din /usr care au fost modificate de cel mult un an. • $ find ~ -mtime 2 -mtime -4 -daystart va lista toate fişierele din structura care porneşte din directorul gazdă acum două până la patru zile. În exemplul precedent am combinat opţiunile -mtime 2 şi mtime -4.

 • Opţiunea -newer va fi folosită pentru a găsi fişierele mai noi decât

• Opţiunea -newer va fi folosită pentru a găsi fişierele mai noi decât un fişier dat. • Exemplu: $ find /etc -newer /etc/fis va lista toate fişierele din directorul structura care porneşte din /etc care au au data de creare mai recentă decât fişierul /etc/fis. • Pentru a căuta fişiere a căror dată de creare este ulterioară unei date specificate, se va folosi comanda touch pentru a introduce acea dată întrun fişier, care va fi argument pentu opţ. -newer. Comanda touch creaza un fisier vid sau update-aza marca timpului ptr. un fisier existent. Parametrii comenzii sunt: • -a ptr. schimbarea numai a datei de acces; • -m ptr. schimbarea numai a datei de modificare; • -t se specifica o anumita data • Exemplu: $ touch -t 04012009 /tmp/timestamp $ find ~ -newer /tmp/timestamp va căuta toate fişierele din structura care porneşte din directorul gazdă care au fost modificate după 1 aprilie 2009(anul curent)

Opţiunea –used este folosită pentru a găsi fişiere accesate după un număr de zile

Opţiunea –used este folosită pentru a găsi fişiere accesate după un număr de zile de la ultima modificare. • Exemplu: $ find ~ -used +100 va căuta fişierele din structura care porneşte din directorul gazdă care au fost accesate după cel puţin 100 de zile de la data ultimei modificări. • Căutarea fişierelor după proprietar Cu opţiunea –user, respectiv –group se pot căuta fişiere care aparţin unui anumit utilizator, respectiv unui grup de utilizatori. • Exemple: $ find /usr/local/fonts -user florea va lista toate fişierele din structura care porneşte din /usr/local/fonts care aparţin utilizatorului florea. $ find /dev -group info va lista toate fişierele din structura care porneşte din directorul /dev al căror proprietar este grupul info.

 • Execuţia de comenzi asupra fişierelor căutate se realizează cu opţiunea -exec care

• Execuţia de comenzi asupra fişierelor căutate se realizează cu opţiunea -exec care ca argument o anumită comandă. Sfârşitul comenzii este marcat de caracterele ‘; ’. Dacă se foloseşte şirul `'{}'` în cadrul comenzii, acesta este înlocuit cu numele de fişier care a fost găsit • Exemple: $ find. -name ’’*. o’’ -exec rm ‘{}’ ‘; ’; va şterge toate fişierele cu sufixul. o, situate în catalogul curent sau în subcataloagele acestuia. • $ find ~/html/ -name '*. html' -exec grep linux `{}` `; ` va găsi toate fişierele din structura care porneşte din directorul ~/html/ cu extensia. html şi va afişa liniile din aceste fişiere care conţin textul linux. • Pentru a se realiza comanda respectivă cu confirmare, se foloseşte -ok în locul lui -exec. • $ find ~ -used +365 -ok rm `{}` `; `va găsi toate fişierele din structura care porneşte din directorul gazdă, care au fost accesate la mai mult de un an de când au fost modificate şi va aştepta confirmarea înainte de ştergere.

 • Căutarea fişierelor după mai multe criterii. Se pot combina mai multe opţiuni

• Căutarea fişierelor după mai multe criterii. Se pot combina mai multe opţiuni pentru a se găsi fişierele care îndeplinesc criterii multiple. • Exemple: • $ find ~ -name 'fis*' -newer /etc/ultmod va lista fişierele din structura care porneşte din directorul gazdă al căror nume începe cu şirul `top’şi care sunt mai noi decât fişierul /etc/ultmod • $ find ~ -size +2000000 c -regex '. *[^gz]' -exec gzip '{}' '; 'va comprima toate fişierele din structura care porneşte din directorul gazdă şi care au o dimensiune de cel puţin doi megabaiţi şi care nu au fost comprimate folosind comanda gzip • Legarea în pipe a comenzii find cu alte comenzi • Exemple: $ find /usr/share | -type d | wc –l va lista numărul fişierelor din structura care porneşte din directorul /usr/share. $ find /usr/share | wc –l va lista numărul fişierelor şi directoarelor din structura care porneşte din directorul /usr/share. • $ find /usr/share | -type f | wc –l va lista numărul directoarelor din structura care porneşte din directorul /usr/share.

 • Alte opţiuni utilizate • -perm onum - “true” dacă drepturile de acces

• Alte opţiuni utilizate • -perm onum - “true” dacă drepturile de acces la fişier corespund exact numărului octal onum. • -type c - “true” dacă tipul fişierului este c (un caracter care poate fi: f - fişier simplu; d - catalog; b - fişier special bloc; c - fişier special caracter; p - “pipe” (canal) cu nume; s - “socket” (pentru comunicarea în reţea). • -print - întotdeauna adevărată, are ca efect afişarea numelui fişierului curent (care corespunde unui criteriu de căutare anterior specificat în expresie); • -ls - întotdeauna adevărată, are ca efect afişarea numelui de cale al fişierului curent şi informaţii suplimentare despre acesta (analog comenzii ls -li); • -prune - întotdeauna adevărată, are ca efect colateral oprirea căutării la numele de cale curent, dacă acesta este catalog (nu se caută recursiv);