Jak policzyć liczbę folderów w określonym katalogu. Używam następującego polecenia, ale zawsze zapewnia ono dodatkowe.
find /directory/ -maxdepth 1 -type d -print| wc -l
Na przykład, jeśli mam 3 foldery, to polecenie zapewnia 4. Jeśli zawiera 5 folderów, polecenie zapewnia 6. Dlaczego?
Odpowiedzi:
find
drukuje również sam katalog:Zamiast tego możesz przetestować dzieci katalogu i w ogóle do nich nie wchodzić:
Możesz również użyć
ls
:źródło
$ ls -l .vim
z PHP? Albo jak uzyskać tylko sumę, bez listy. Mam na myśli, że w tym przypadku tylko52
?(ls).Count
ls -l | grep -c ^d
jest śmiertelnie prosta i działa. @Pathros jest prawdopodobnie lepszy sposób w PHP, ale w najgorszym przypadku w PHP zawsze możesz użyć funkcji shell_exec () do wykonania wiersza poleceń i zwrócenia wyników do łańcucha. ie$dirCount = shell_exec('ls -l | grep -c ^d');
Uzyskaj liczbę tylko katalogów w bieżącym katalogu
echo */ | wc
wyjdziesz jak
1 309 4594
2nd digit
oznacza nie. katalogów.lub
tree -L 1 | tail -1
źródło
zsh: no matches found: */
need nullglobecho
. typwhich echo
echo */ | wc -w
Do znaleziska
-mindepth
oznacza Łączna recusive w katalogach-maxdepth
oznacza całkowitą liczbę recusive w katalogach-type d
oznacza katalogA dla
wc -l
środków policz linie wejściaźródło
find . -mindepth 1 -maxdepth 1 -type d | wc -l
da ci dużo spacji między liczbą, na przykład: `dir_count=`find . -maxdepth 1 -type d | wc -l | xargs`; echo $dir_count # will print just 2
if (( $dir_count > 1 )); then echo "Yaa"; fi # will print "Yaa"
Jeśli masz tylko katalogi w folderze i nie masz plików, to robi to:
źródło
Najlepszy sposób, aby przejść do dysku i po prostu wykonać
i znaleźć wszystkie foldery łącznie, w tym podkatalogi?
... lub znaleźć wszystkie foldery w katalogu głównym (bez podkatalogów)?
Twoje zdrowie!
źródło
-lR
ignorują katalog z prefiksem kropkowym podczas ichfind -type d
liczenia, więc liczba podana przez pierwsze polecenie jest błędna, jeśli masz katalogi z prefiksem kropkowym (na przykład masz podkatalog .git!). Nie możesz po prostu użyć,-lRa
ponieważ otrzymujesz również dla każdego katalogu.
i..
wpisu. Dotyczy to również odpowiedzi @Pavel AnossovUruchom
stat -c %h folder
i odejmij 2 od wyniku. Wykorzystuje to tylko jeden podproces w przeciwieństwie do 2 (lub nawet 3) wymaganych przez większość innych rozwiązań tutaj (zazwyczajfind
pluswc
).Korzystanie z sh / bash:
Korzystanie z csh / tcsh:
Objaśnienie:
stat -c %h folder
wyświetla liczbę twardych dowiązań do folderu , a każdy podfolder w folderze zawiera wpis ../, który jest twardym łączem z powrotem do folderu . Musisz odjąć 2, ponieważ licznik zawiera dwa dodatkowe twarde dowiązania:źródło
Myślę, że najłatwiej jest
gdzie
images
jest twój katalog docelowy. Flaga -d ogranicza do katalogów, a opcja -l wykonuje listowanie w każdym wierszu, zgodne z bardzo dobrze znaną wwc -l
przypadku liczby wierszy.źródło
man ls
,-d
robi: „lista same katalogi, a nie ich zawartość”, czyli po uruchomieniuls /tmp
, dostaniesz co jest/tmp
, a jeśli uruchomićls -d /tmp
po prostu dostać/tmp
.-d
Przełącznik nie filtruje katalogów, jak został poproszony o.Kilka przydatnych przykładów:
count plików w aktualnym katalogu
count dirs w aktualnym reż
liczyć pliki i katalogi w aktualnym reż
policzyć pliki i katalogi w jednym podkatalogu
Zauważyłem dziwną rzecz (przynajmniej w moim przypadku):
źródło
Nr katalogu, który możemy znaleźć za pomocą poniższego polecenia
ls -l | grep "^d" | wc -l
źródło
ls -l | grep ^d | wc -l
zrobię, nie ma potrzeby"
tutaj używaćCzyste rozwiązanie bash:
Jeśli chcesz również policzyć ukryte katalogi:
Zauważ, że będzie to również liczyło linki do katalogów. Jeśli tego nie chcesz, ta metoda jest nieco trudniejsza.
Używając
find
:Sztuczka polega na tym,
x
aby za każdym razem, gdy katalog został znaleziony, wypisać na standardowe wyjście, a następnie użyć gowc
do zliczenia liczby znaków. Policzy to liczbę wszystkich katalogów (w tym ukrytych), z wyłączeniem linków.Przedstawione tutaj metody są bezpieczne dla zabawnych znaków, które mogą pojawić się w nazwach plików (spacje, znaki nowej linii, znaki globu itp.).
źródło
Używając
zsh
:N
Jest nullglob,/
sprawia, że pasuje do katalogów,#
liczniki. Zgrabnie poradzi sobie ze spacjami w nazwach katalogów, a także zwraca,0
jeśli nie ma katalogów.źródło
Policz wszystkie pliki i podfoldery, styl systemu Windows:
źródło
Jeśli chcesz używać wyrażeń regularnych, spróbuj:
źródło
Najlepsza odpowiedź na to, czego chcesz, to
to odejmuje jeden, aby usunąć niechciane „.” katalog, który znajduje listy (jak wspomniano powyżej patel deven).
Jeśli chcesz liczyć podfoldery rekurencyjnie, po prostu zostaw opcję maxdepth, więc
PS Jeśli podstawianie poleceń jest brzydkie, odejmowanie jednego można wykonać jako czysty strumień za pomocą
sed
ibc
.Odejmowanie jednego od liczby:
lub dodając count do minus jeden:
źródło
Najlepszy sposób na to:
To daje idealną liczbę.
źródło
total
? twoja metoda jest zepsuta:(
. Nie analizujls
!