Puncte:-4

Cum să numărați toate folderele și sub folderele într-un mod recursiv de director

drapel in

Sarcina este: Ieșirea la rularea fișierului va fi numărul de subdirectoare (numărând toate subdirectoarele din arbore) din directorul introdus.

Știu cum să recursiv un dir folosind -r dar cum pot număra toate aceste numere într-un fișier script shell?

drapel us
Este aceasta o temă pentru acasă?
drapel in
Da, este o temă și am căutat pe internet dar nu am găsit nimic :(
Puncte:4
drapel hr

Pentru a număra toate directoarele inclusiv cele ascunse într-un arbore înrădăcinat în directorul curent . fie

găsi . -type d -printf '\n' | wc -l

sau

găsi . -tip d -printf x | wc -c

(puteți înlocui orice caracter unic în locul lui X: dacă alegeți un personaj care este special pentru coajă, asigurați-vă că îl citați sau scăpați de el). Folosind printf '\n' | wc -l sau printf x | wc -c în loc de a trece o listă de nume de fișiere către wc -l se va asigura că numărul este corect chiar dacă există directoare ale căror nume conține linii noi.

Ambele comenzi includ directorul de pornire . în numărare – dacă vrei să numeri strict subdirectoarele apoi fie scădeți 1, fie adăugați -profunzimea mintii 1

găsi . -mindepth 1 -type d -printf '\n' | wc -l

sau utilizați ! -Nume . a exclude pe . directorul în mod explicit.

Dacă doriți să excludeți directoarele ascunse (inclusiv posibil non-subdirectoare ascunse ale celor ascunse), apoi prună uscată ei ex.

find -mindepth 1 -type d \( -name '.*' -prune -o -printf x \) | wc -c

Alternativ, folosind globul recursiv al shell-ului pentru a traversa arborele. Folosind zsh, de exemplu

dirs=( **/(ND/) )
print $#dirs

Unde (ND/) sunt calificative glob care fac **/ potrivește numai directoare și include ascunse ("Dot") cele - omite D dacă doriți să numărați numai directoarele neascunse.

Puteți face ceva similar în bash:

shopt -s nullglob dotglob globstar
set -f -- **/
printf „%d\n” „$#”

cu toate acestea, spre deosebire de zsh's / calificativ, cel **/ modelul glob se potrivește cu orice care arată ca un director - inclusiv link-uri simbolice către directoare.

drapel in
Vă mulțumesc mult pentru răspuns
drapel hr
@bac0n mulțumesc - adăugat (și actualizat celelalte părți cu -mindepth pentru consecvență)
Puncte:1
drapel cn

Încearcă să alergi ls -l -R | grep -c ^d în terminalul dvs. din directorul în care doriți să știți câte sunt în interior.

*** Editați | × *** Utilizați cele de mai jos pentru a scana cu o cale variabilă solicitată utilizatorului.

#!/bin/bash
echo „Vă rugăm să introduceți calea de scanare:”
calea de citire
ls -l -R $cale | grep -c ^d
drapel in
Exact asta caut
drapel in
Dar cum pot seta calea personalizată către folder?
Roxana avatar
drapel cn
Puteți adăuga calea comenzii ca ```ls -l -R /usr/share/themes | grep -c ^d ```. Puteți adăuga o variabilă precum ```ls -l -R $cale | grep -c ^d``` și au $path ca intrare variabilă în scriptul dumneavoastră.
drapel in
Mulțumesc mult
sourav c. avatar
drapel cn
În general, analiza rezultatului lui `ls` este o idee proastă. Nu as incuraja pe nimeni. Vedeți https://unix.stackexchange.com/questions/128985/why-not-parse-ls-and-what-to-do-instead
Roxana avatar
drapel cn
Mi-am editat răspunsul de mai sus pentru a afișa variabila. Sourav nu se înșeală în ceea ce privește evitarea analizei LS, dar din moment ce NU căutați nume de fișiere, ci mai degrabă numărați folderele, nu contează. este o solutie simpla si curata.
bac0n avatar
drapel cn
@Roxanna Va prezenta în continuare o problemă, cred că modul non-interactiv folosește literal ca stil de citare, asta ar însemna, de exemplu, `'folder'$'\n''d'` va da fals pozitiv, cred că orice alt *stil de citare* va face.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.