Astăzi am avut o întrebare aparent simplă în capul meu: "Cum se calculează numărul de fișiere / foldere din consola sistemelor de tip unix?". Deoarece linux'om am foarte puțină experiență de lucru, deci aici, imediat, răspunsul nu a putut să vină cu o soluție (rușine). Am vrut să pun un șurub de fier pe toate astea, dar curiozitatea mi-a luat amploarea și am decis să mă conectez la serverul nostru care rulează FreeBSD. Am vrut cu adevărat experimente rapide. Ce sa întâmplat - citiți mai departe.
Deci, clientul SSH a aprins fervent și mi-a arătat privirea consolei goale a bzdi-ului. În general, lucrăm cu toate animalele (linux) și cu creaturile infernale (freebsd), domnitorul Lord_of_fear. Știam că domnul știe cu siguranță răspunsul la întrebarea care ma chinuit, dar a decis să încerce să ajungă la o decizie pe cont propriu.
La început am crezut că comanda mea ar putea satisface nevoia mea modestă. Poked și așa și așa, dar, ceea ce am fost, nu trebuia să găsesc. De ce m-am gândit la ls? Da, deoarece cu ls, listează fișierele și folderele din directorul solicitat în vizualizări diferite. Ca o persoană cu o lipsă de experiență adecvată, mi sa părut logic ca operațiunea ca fișiere de numărare să fie organizată. Din păcate, m-am înșelat. Ei bine, nimic, a început să se răcească.
Și apoi a fost cel mai interesant. Mi-am amintit că există o astfel de comandă ca WC. Pentru cei care nu știu despre ce vorbesc. Utilizând wc, puteți calcula numărul de caractere / linii (tasta l) / octet etc. O mică mișcare, creierul meu a generat următoarea soluție:
Echipa a scuipat imediat numărul 22. Experimentul a fost un succes. Am numărul de fișiere și directoare din directorul curent. Scopul a fost un fel de realizare, dar apoi am decis că ar fi minunat să obținem exact numărul de fișiere, adică fără a ține seama de directoare. A început să se răsucească din nou pentru a răsuci combinația și a răsturnat-o la următoarea:
Comanda a fost executată cu succes și mi-a arătat numărul de fișiere. Despre cum funcționează aceasta, îți spun puțin mai târziu, dar pentru moment vă voi arăta numărul de directoare:
Nu m-am înșelat, echipa a dat din nou rezultatul corect. Acum am fost complet mulțumit. Am primit răspunsul la întrebare, dar am vrut încă să fac un test suplimentar. De data aceasta am decis să număr numărul de fișiere cu o anumită extensie. Să creadă că nu mai era nevoie. Doar modificați comanda la formular:
Așa cum era de așteptat, de data aceasta, echipa a jucat, de asemenea, fără erori. Acum hai să ne îndepărtăm puțin și să încercăm să ne dăm seama ce am scris aici. Deci, să începem cu comanda ls cu parametrul l. Comanda ls în lumea Unix este concepută pentru a obține o listă de fișiere / directoare dintr-un anumit director. Dacă specificați parametrul l la apelarea acestei comenzi, vor fi afișate informații suplimentare pentru fiecare fișier / dosar. Pentru informații suplimentare, mă refer la data, dimensiunea fișierului, permisiunile etc.
Exemplul de ieșire a informațiilor utilizând comanda ls cu tasta l a fost prezentat în figură. Uită-te atent la imagine. Dacă nu înțelegeți sistemele asemănătoare unix, atunci vă sfătuiesc să acordați o atenție deosebită primei coloane. Specifică drepturile de acces. Primul caracter (-) din fața măștii drepturilor înseamnă că acesta este fișierul. Scrisoarea d, dimpotrivă, ne dă o idee clară că acesta este un catalog. Deci, pentru a determina numărul de fișiere din director, trebuie doar să numărăm linia de ieșire cu comanda ls -l, care are primul caracter bord (-).
Pentru a rezolva această problemă, folosesc comanda grep. Comanda grep se numește aceeași linie ca ls. După comanda ls -l citez caracter |, ceea ce înseamnă că ieșirea unei comenzi (ls -l) trebuie să fie transmisă ca parametru pentru echipa, a declarat după conducta. Sper că totul este clar în acest moment. Trecem mai departe.
Comanda grep în sine este destinată pentru căutarea textului în fișiere. În cazul nostru, această comandă va fi utilizată pentru a selecta liniile care încep cu simbolul (-). Știm că este necesar să efectuăm căutarea la începutul liniei (adică, pentru a verifica primul caracter), și dacă da, atunci vom introduce o rafinare pentru grep. În lumea de tip unix, totul se face foarte flexibil și ar fi ciudat dacă grep nu susține expresii regulate. Este și este păcat să nu o folosiți. Pentru a rezolva această problemă, vom folosi construcția: ^ -. Cei care încă nu au început să-i învețe pe cei obișnuiți, îți explic. Această expresie indică faptul că primul simbol ar trebui să fie -. Același algoritm pe care îl folosesc pentru a calcula numărul de directoare. Numai de această dată, în loc de caracterul -, specifică litera d (directorul). Cred că nu este necesar să explicăm exemplul de numărare a numărului de fișiere cu extensia php.
Este atât de ușor să calculezi numărul de fișiere / foldere într-o consolă oribilă și teribilă de sisteme de tip unix. Mult noroc!
Citează ls -l | grep php | wc -l
Nu este mai ușor?
ls -l * .php | wc -l
De ce apelați grep când aceeași operație poate fi efectuată folosind ls?