Hej, to całkiem sprytne, zawsze do nas przywykłem ls -al | grep '^d'- to jest bardziej zwięzłe.
paxdiablo
43
dlaczego używać * / ?? proszę wytłumacz!?
Chandeep,
6
Nie mam odpowiedniego wyjaśnienia, ale wiem, że */wymusza wyświetlanie tylko elementów kończących się ukośnikiem, który w tym przypadku byłby katalogiem, nawet jeśli -Fopcja lsnie byłaby używana. Podobne do zachowania ls *phpi sposobu wyświetlania wszystkich plików kończących się phpw katalogu.
David Hancock
3
@ user975234 Ktoś zadał podobne pytanie i istnieje całkiem niezłe wyjaśnienie, link
Dla mnie wygląda to tak, jak należy to zrobić. W przeciwieństwie do sugerowanych lsrozwiązań, findponosi wyłączną odpowiedzialność za wykonanie zadania (nie polega na rozszerzaniu symboli wieloznacznych powłoki, co może nakładać ograniczenia). Jest również o wiele bardziej zwięzły.
Peter
1
Złą rzeczą jest to, że nie działa, jeśli próbujesz przeglądać wyniki, a wyniki mają spacje w nazwach.
ubiquibacon
2
Ewentualnie, jeśli nie chcą zawierać katalog sama: find * -maxdepth 0 -type d.
James Ko
@ubiquibacon użyć find„s -print0lub -execopcji.
1
To jest naprawdę wolne, przynajmniej na moim Macu. Wygląda na to, że wykonuje pełne wyszukiwanie rekurencyjne, które findzwykle wykonuje, ale wyświetla tylko foldery na głębokości 1.
Kara Brightwell
22
Następujące
find *-maxdepth 0-type d
w zasadzie filtruje rozszerzenie -type dwarunku „*”, tj. wszystkich pozycji w bieżącym katalogu, według warunku.
Zaletą jest to, że dane wyjściowe są takie same ls -1 *, ale tylko w przypadku katalogów, a wpisy nie zaczynają się od kropki
I dziękuję za wyjaśnienie przełączników. Przepełnienie stosu dotyczy odpowiedzi. Zawsze doceniam to, że ludzie lubią cię z wyjaśnieniem, a nie „po prostu przeczytaj wpis man!”. <- to nie jest odpowiedź.
fusion27,
Aby rozpocząć od linii 2 (pomiń linię tylko kropką):tree -d -L 1 -i --noreport | tail -n +2
adius
Jest to najwyżej ocenione rozwiązanie, które wyświetla miękko połączone katalogi i robi to w użyteczny sposób, pokazując je jako link. Wolę wariant:tree -C -d -L 1 -i --noreport | tail -n+2
Amnon Harel
9
ls -l | grep '^d'
Możesz utworzyć alias i umieścić go w pliku profilu
łącza nie są wyświetlane za pomocą tego polecenia. Link może być plikiem lub katalogiem. Przykład: lrwxrwxrwx 1 root root 21 kwietnia 15 17:38 cron -> / lib / init / upstart-job.
c-toesca
7
find .-maxdepth 1-type d -name [^\.]\* | sed 's:^\./::'
☀ znajdź. -maxdepth 1 -typ d -name [^ \.] * | sed 's: ^ \ ./ ::' zsh: nie znaleziono pasujących elementów: [^.] *
Michael Cole
6
Aby wyświetlić listę ls -d */można użyć katalogów w bieżącym katalogu roboczym
. Jeśli chcesz wyświetlić ukryte katalogi, użyj tego polecenia
ls -d .*/
ls -d <ścieżka katalogu niestandardowego> | sed -e „s / \ /// g” nie działa .. jakieś wskazówki?
Dhwanit,
Dziękuję Ci! Chciałem tylko listy katalogów bez wszystkich uprawnień i to załatwiło sprawę. :)
codingjeremy
5
find specifiedpath -type d
Jeśli nie chcesz powtarzać się w podkatalogach, możesz to zrobić w zamian:
find specifiedpath -type d -mindepth 1 -maxdepth 1
Zauważ, że .zostaną również wyświetlone katalogi „kropkowe” (których nazwa zaczyna się na ); ale nie specjalne katalogi .ani ... Jeśli nie chcesz katalogów „kropkowych”, możesz je po prostu grepusunąć:
wyświetli wszystkie katalogi, w tym katalogi ukryte, w długiej formie.
Niedawno przeszedłem na zsh (MacOS Catalina) i stwierdziłem, że:
ls -ld */.*/
przestaje działać, jeśli bieżący katalog nie zawiera ukrytych katalogów.
zsh: no matches found:.*/
Wypisuje powyższy błąd, ale także nie wydrukuje żadnych katalogów.
ls -ld *(/).*(/)
Również zawodzi w ten sam sposób.
Do tej pory odkryłem, że to:
ls -ld */;ls -ld .*/
jest przyzwoitym obejściem. Jest ;to separator poleceń. Ale oznacza to, że jeśli nie ma żadnych ukrytych katalogów, wyświetli listę katalogów i nadal drukuje błąd w przypadku braku ukrytych katalogów:
foo
bar
zsh: no matches found:.*/
lsjest polecenie powłoki dla lista zawartości bieżącego katalogu -ljest flaga, aby określić, że chcesz do listy w Longford (jedna pozycja na linię + kilka innych informacji chłodnym) -djest flaga do listy wszystkich katalogów „jako pliki”, a nie rekurencyjnie */jest argument „wyświetl wszystkie pliki kończące się ukośnikiem” *jest prostym poleceniem regex dla „cokolwiek”, więc */prosi powłokę o wyświetlenie listy „cokolwiek kończącego się na” / ”
Zobacz man lspo więcej informacji.
Kładę to:
alias lad="ls -ld */;ls -ld .*/"
w moim .zshrc i wydaje się, że działa dobrze.
UWAGA: Odkryłem to również
ls -ld .*/ 2> /dev/null
nie działa, ponieważ nadal drukuje sterr na terminalu. Zaktualizuję swoją odpowiedź, jeśli / kiedy znajdę rozwiązanie.
Może to obejmować pliki, jeśli zawierają je dowolne nazwy plików drw, i wyklucza katalogi, które nie są czytelne dla właściciela i nie mogą być zapisywane. grep ^ddziała lepiej.
Odpowiedzi:
Spróbuj
ls -d */
wyświetlić listę katalogów w bieżącym kataloguźródło
ls -al | grep '^d'
- to jest bardziej zwięzłe.*/
wymusza wyświetlanie tylko elementów kończących się ukośnikiem, który w tym przypadku byłby katalogiem, nawet jeśli-F
opcjals
nie byłaby używana. Podobne do zachowanials *php
i sposobu wyświetlania wszystkich plików kończących sięphp
w katalogu.echo */
zrobi to samo zaSpróbuj tego:
źródło
ls
rozwiązań,find
ponosi wyłączną odpowiedzialność za wykonanie zadania (nie polega na rozszerzaniu symboli wieloznacznych powłoki, co może nakładać ograniczenia). Jest również o wiele bardziej zwięzły.find * -maxdepth 0 -type d
.find
„s-print0
lub-exec
opcji.find
zwykle wykonuje, ale wyświetla tylko foldery na głębokości 1.Następujące
w zasadzie filtruje rozszerzenie
-type d
warunku „*”, tj. wszystkich pozycji w bieżącym katalogu, według warunku.Zaletą jest to, że dane wyjściowe są takie same
ls -1 *
, ale tylko w przypadku katalogów, a wpisy nie zaczynają się od kropkiźródło
Możesz użyć
ls -d */
lubtree -d
Innym rozwiązaniem byłoby globowanie, ale zależy to od używanej powłoki i obsługiwanego globowania dla katalogów.
Na przykład ZSH:
źródło
tree
?tree
domyślnie nie jest instalowana (chociaż jest w repozytoriach).tree
polecenie nie jest rodzimym poleceniem uniksowym (popraw mnie, jeśli się mylę).Ponieważ istnieje wiele sposobów, aby to zrobić, oto kolejny:
źródło
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
Możesz utworzyć alias i umieścić go w pliku profilu
źródło
źródło
Aby wyświetlić listę
ls -d */
można użyć katalogów w bieżącym katalogu roboczym . Jeśli chcesz wyświetlić ukryte katalogi, użyj tego polecenials -d .*/
źródło
użyj tego, aby uzyskać listę katalogów
źródło
find specifiedpath -type d
Jeśli nie chcesz powtarzać się w podkatalogach, możesz to zrobić w zamian:
find specifiedpath -type d -mindepth 1 -maxdepth 1
Zauważ, że
.
zostaną również wyświetlone katalogi „kropkowe” (których nazwa zaczyna się na ); ale nie specjalne katalogi.
ani..
. Jeśli nie chcesz katalogów „kropkowych”, możesz je po prostugrep
usunąć:find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
źródło
mindepth
o pozbyciu się.
! 😁Odpowiedź będzie zależeć od twojej powłoki .
Na
zsh
przykład możesz wykonać następujące czynności:Zostaną wyświetlone wszystkie katalogi w bieżącym katalogu roboczym.
Zobacz
man zshexpn
po więcej informacji.Alternatywnym podejściem byłoby użycie
find(1)
, które powinno działać na większości smaków Uniksa:find(1)
ma wiele zastosowań, więc zdecydowanie polecamman find
.źródło
Aby to zrobić, możesz użyć
tree
polecenia zd
przełącznikiem.zobacz
man tree
więcej informacji.źródło
tree
. No cóż, nie miałem zamiaru ukraść niczyich grzmotów.Jeśli mam ten katalog:
ls -l
Aby uzyskać wszystkie katalogi, użyj -L do rozwiązania linków:
ls -lL | grep '^d'
Bez -L:
ls -l | grep '^d'
Brakuje katalogu conf_nagios .
źródło
źródło
To działało dla mnie:
(Ale przechodzę na,
echo */
jak wspomniano @nos)źródło
Oto inne rozwiązanie, które pokazuje połączone katalogi. Nieco wolę, ponieważ jest to podzbiór „normalnego” wyjścia ls -l:
źródło
W bash:
Wyświetla listę wszystkich katalogów
wyświetli wszystkie katalogi w długiej formie
wyświetli wszystkie katalogi, w tym katalogi ukryte, w długiej formie.
Niedawno przeszedłem na zsh (MacOS Catalina) i stwierdziłem, że:
przestaje działać, jeśli bieżący katalog nie zawiera ukrytych katalogów.
Wypisuje powyższy błąd, ale także nie wydrukuje żadnych katalogów.
Również zawodzi w ten sam sposób.
Do tej pory odkryłem, że to:
jest przyzwoitym obejściem. Jest
;
to separator poleceń. Ale oznacza to, że jeśli nie ma żadnych ukrytych katalogów, wyświetli listę katalogów i nadal drukuje błąd w przypadku braku ukrytych katalogów:ls
jest polecenie powłoki dla lista zawartości bieżącego katalogu-l
jest flaga, aby określić, że chcesz do listy w Longford (jedna pozycja na linię + kilka innych informacji chłodnym)-d
jest flaga do listy wszystkich katalogów „jako pliki”, a nie rekurencyjnie*/
jest argument „wyświetl wszystkie pliki kończące się ukośnikiem”*
jest prostym poleceniem regex dla „cokolwiek”, więc*/
prosi powłokę o wyświetlenie listy „cokolwiek kończącego się na” / ”Zobacz
man ls
po więcej informacji.Kładę to:
alias lad="ls -ld */;ls -ld .*/"
w moim .zshrc i wydaje się, że działa dobrze.
UWAGA: Odkryłem to również
ls -ld .*/ 2> /dev/null
nie działa, ponieważ nadal drukuje sterr na terminalu. Zaktualizuję swoją odpowiedź, jeśli / kiedy znajdę rozwiązanie.
źródło
du -d1
jest być może najkrótszą opcją. (Tak długo, jak nie trzeba przesyłać danych wejściowych do innego polecenia).źródło
Aby wyświetlić listę tylko katalogów w określonej ścieżce, wystarczy wpisać ls -l | grep drw
źródło
drw
, i wyklucza katalogi, które nie są czytelne dla właściciela i nie mogą być zapisywane.grep ^d
działa lepiej.Długa lista katalogów
Listowanie katalogów
- ls -d * /
źródło