To polecenie wyświetla listę katalogów w bieżącej ścieżce: ls -d */
Co dokładnie robi wzorzec */
?
I jak możemy podać ścieżkę bezwzględną w powyższej komendzie (np. ls -d /home/alice/Documents
) aby wyświetlić tylko katalogi w tej ścieżce?
*/
jest wzorcem pasującym do wszystkich podkatalogów w bieżącym katalogu (*
pasowałby do wszystkich plików i podkatalogów; /
ogranicza go do katalogów). Podobnie, aby wylistować wszystkie podkatalogi pod /home/alice/Documents, użyj ls -d /home/alice/Documents/*/
.
echo
Przykład: echo */
, echo */*/
Oto co otrzymałem:
cs/ draft/ files/ hacks/ masters/ static/
cs/code/ files/images/ static/images/ static/stylesheets/
ls
Przykład: ls -d */
Oto dokładnie to, co dostałem:
cs/ files/ masters/
draft/ hacks/ static/
Lub jako lista (z informacjami szczegółowymi): ls -dl */
ls
i grep
.Przykład: ls -l | grep "^d"
Oto co otrzymałem:
drwxr-xr-x 24 h staff 816 Jun 8 10:55 cs
drwxr-xr-x 6 h staff 204 Jun 8 10:55 draft
drwxr-xr-x 9 h staff 306 Jun 8 10:55 files
drwxr-xr-x 2 h staff 68 Jun 9 13:19 hacks
drwxr-xr-x 6 h staff 204 Jun 8 10:55 masters
drwxr-xr-x 4 h staff 136 Jun 8 10:55 static
Przykład: for i in $(ls -d */); do echo ${i%%/}; done
Oto co dostałem:
cs
draft
files
hacks
masters
static
Jeśli lubisz mieć '/' jako znak kończący, polecenie będzie brzmiało: for i in $(ls -d */); do echo ${i}; done
.
cs/
draft/
files/
hacks/
masters/
static/
Używam:
ls -d */ | cut -f1 -d'/'
Tworzy to pojedynczą kolumnę bez spreparowanego ukośnika - przydatne w skryptach.
Moje dwa grosze.