Wiem, że istnieje już wybrana odpowiedź, ale żądane zachowanie można uzyskać tylko ls:
ls -ld -- */
(Zauważ, że „-” oznacza koniec parametrów, uniemożliwiając interpretację nazw folderów rozpoczynających się od myślnika jako dalszych opcji poleceń).
Spowoduje to wyświetlenie wszystkich nie ukrytych (chyba że skonfigurujesz globusy powłoki, aby je rozwinąć) katalogów w bieżącym katalogu roboczym, w którym jest uruchomiony (pamiętaj, że zawiera również dowiązania symboliczne do katalogów). Aby uzyskać wszystkie podkatalogi innego folderu, po prostu spróbuj:
Miły. Nigdy nie uważałem, że katalogi mają niejawne znaczenie /na końcu - ale teraz, kiedy widzę, że odpowiadasz, ma to sens. W końcu tab-uzupełnianie zawsze to dodaje.
gvkv
-d for dir, -l for long format. jaki jest cel --?
Dineshkumar
1
Chociaż wygląda to krótko i działa w większości przypadków, nie można stosować tego podejścia, gdy potrzebny jest prawdziwy katalog, a nie dowiązanie symboliczne katalogu. Tak findjest rzeczywiście dobrym wyborem w tej sprawie.
biocyberman
1
findma również tę zaletę, gdy liczba katalogów przekracza maksymalną długość argumentu.
Steven D
Praca w tył, po prostu sobie sprawę, można po prostu zignorować coś z rozszerzeniem: ls -alhF --ignore=*.*. Nie jestem pewien, jak dobrze poradziłoby sobie z „ukrytymi” folderami, tj..myHiddenFolder
Tak było na Ubuntu 14.04 -maxdepth 1. findChciałem też, abym find . -maxdepth 1 -type d
zmienił
To ls -F | grep /rozwiązanie działa cuda! Wydaje się, że jest to jedyny, który mogę uruchomić na moim komputerze FreeBSD. Myślę, że korzystanie z Fish oznacza, że coś z */może nie działać?
cjm
Nigdy nie pracowałem z Fishem, więc nie jestem tego pewien, ale opcja -F może zdziałać cuda.
gvkv
7
Lubię narzędzie drzewa , aby uzyskać przegląd struktury katalogów. Jest dostępny w MacPorts i we wszystkich dystrybucjach Linuksa, które wypróbowałem.
tree -d -L 2
To pokazuje wszystkie katalogi, głębokie na dwa poziomy.
Miło wiedzieć, że nie jestem jedyną osobą, która używa grep "^d"hacka
Michael Mrozek
6
O ile mi wiadomo, zachowanie, które opisuje, nie jest błędem i jest takie samo, jeśli używa się GNU ls. Opcja -d wyświetla listę dla katalogu, a nie zawartość. Aby zobaczyć, dlaczego to może być przydatne, zobacz różnicę między: ls -l /homeals -dl /home
Steven D
Karaty nie są wyjątkowe dla muszli. Możesz po prostu użyć ls -l / | grep ^d. Jeśli są zamiar użyć cudzysłowu, ponieważ nie trzeba interpretacji parametrów, ich pojedyncze cytaty. ls -l / | grep '^d'. Tak, jestem pedantem. Ale naprawdę, zrób to. :)
Wildcard
-1
$ ls -p | grep /
-pFlag pozwoli lsdodać ukośnik ( `/ ') po każdym pliku jeśli plik jest katalogiem.
Najprostszym sposobem jest wpisanie następującego polecenia. Działa to na większości platform i wersji UNIX i Linux. Możesz pominąć, -Fjeśli chcesz, ale jest to argument, który dodaje / na końcu nazwy katalogu. -CArgumentem rejestruje tylko nazwy katalogów - wszystkie z nich w bieżącym katalogu. Jeśli chcesz zobaczyć tylko katalogi i podkatalogi w bieżącej ścieżce, po prostu dodaj -Rargument ( ls -CFR).
We wszystkich lsimplementacjach znam i w specyfikacji POSIX ls, -Cto do wyjścia w kolumnach , aby nie pominąć pliki spoza katalogu. W twoim przykładzie /są one drukowane przed nazwami plików, czego nie lszrobiłaby żadna implementacja. Dzięki -F, /jest dołączana do nazwy pliku dla plików katalogowych.
Stéphane Chazelas,
Kiedy zobaczyłem tę odpowiedź, zastanawiałem się: „Gdzie to jest prawda?” @ StéphaneChazelas i Jeff Schaller - czy nie krytykujesz rażąco błędnych odpowiedzi?
ls -d
daje tylko.
i dlaczego*/
należy dodać do końca, aby działał?ls
domyślnie jest to.
. I-d
środki nie wydrukować zawartość katalogu, wydrukuj samego katalogu.ls -p
to pokazuje/
po nazwach katalogów. Więc*/
to tylko próbka, która jest porównywana z nazwą katalogu i/
kombi.Odpowiedzi:
Wiem, że istnieje już wybrana odpowiedź, ale żądane zachowanie można uzyskać tylko
ls
:(Zauważ, że „-” oznacza koniec parametrów, uniemożliwiając interpretację nazw folderów rozpoczynających się od myślnika jako dalszych opcji poleceń).
Spowoduje to wyświetlenie wszystkich nie ukrytych (chyba że skonfigurujesz globusy powłoki, aby je rozwinąć) katalogów w bieżącym katalogu roboczym, w którym jest uruchomiony (pamiętaj, że zawiera również dowiązania symboliczne do katalogów). Aby uzyskać wszystkie podkatalogi innego folderu, po prostu spróbuj:
Zauważ, że -l jest opcjonalny.
źródło
/
na końcu - ale teraz, kiedy widzę, że odpowiadasz, ma to sens. W końcu tab-uzupełnianie zawsze to dodaje.-d for dir, -l for long format
. jaki jest cel--
?find
jest rzeczywiście dobrym wyborem w tej sprawie.find
ma również tę zaletę, gdy liczba katalogów przekracza maksymalną długość argumentu.ls -alhF --ignore=*.*
. Nie jestem pewien, jak dobrze poradziłoby sobie z „ukrytymi” folderami, tj..myHiddenFolder
Nie, ale wystarczy proste
find
polecenie:lub
grep
W razie potrzeby możesz także użyć aliasu.
źródło
-maxdepth 1
.find
Chciałem też, abymfind . -maxdepth 1 -type d
ls -F | grep /
rozwiązanie działa cuda! Wydaje się, że jest to jedyny, który mogę uruchomić na moim komputerze FreeBSD. Myślę, że korzystanie z Fish oznacza, że coś z*/
może nie działać?Lubię narzędzie drzewa , aby uzyskać przegląd struktury katalogów. Jest dostępny w MacPorts i we wszystkich dystrybucjach Linuksa, które wypróbowałem.
To pokazuje wszystkie katalogi, głębokie na dwa poziomy.
źródło
Musiałem także wyświetlić ukryte katalogi, więc zmodyfikowałem powyższą sugestię, aby dopasować ją do moich potrzeb
(w zależności od powłoki, która może również obejmować
.
i..
)źródło
Dzięki
zsh
(jak domyślnie znajduje się w macOS, nawet/bin/sh
tam był), użyjesz kwalifikatorów glob, aby wybrać pliki na podstawie ich typu:Wyświetl nie ukryte katalogi:
Wyświetl wszystkie katalogi:
(
.
i..
zawsze są wykluczone, dodaj je indywidualnie, jeśli chcesz)Uwzględnij także dowiązania symboliczne do katalogów:
(
-
sprawia, że po rozstrzygnięciu dowiązania symbolicznego obowiązują dalsze kwalifikatory).źródło
Myślę, że ls ma błąd w Mac OS X. Obejściem tego problemu jest użycie grep ...
ls -l / | grep "^d"
źródło
grep "^d"
hackals -l /home
als -dl /home
ls -l / | grep ^d
. Jeśli są zamiar użyć cudzysłowu, ponieważ nie trzeba interpretacji parametrów, ich pojedyncze cytaty.ls -l / | grep '^d'
. Tak, jestem pedantem. Ale naprawdę, zrób to. :)-p
Flag pozwolils
dodać ukośnik ( `/ ') po każdym pliku jeśli plik jest katalogiem.źródło
Najprostszym sposobem jest wpisanie następującego polecenia. Działa to na większości platform i wersji UNIX i Linux. Możesz pominąć,
-F
jeśli chcesz, ale jest to argument, który dodaje / na końcu nazwy katalogu.-C
Argumentem rejestruje tylko nazwy katalogów - wszystkie z nich w bieżącym katalogu. Jeśli chcesz zobaczyć tylko katalogi i podkatalogi w bieżącej ścieżce, po prostu dodaj-R
argument (ls -CFR
).źródło
ls
implementacjach znam i w specyfikacji POSIXls
,-C
to do wyjścia w kolumnach , aby nie pominąć pliki spoza katalogu. W twoim przykładzie/
są one drukowane przed nazwami plików, czego niels
zrobiłaby żadna implementacja. Dzięki-F
,/
jest dołączana do nazwy pliku dla plików katalogowych.to pokaże twoje katalogi na niebiesko
źródło