Re: list only directories (195 Views)
Reply
Valued Contributor
support_billa
Posts: 192
Registered: ‎06-27-2011
Message 1 of 6 (248 Views)
Accepted Solution

list only directories

hello,

 

i want to list  in a directory all directories, but i have to exclude files and other directories

 

old way was "ls" ( but this command include files)

 

ls 
Output
dir1
dir2

 

better way is "find"

find . \( -name . -o -prune \) -type d
Output
.
./dir1
./dir2

 

but does a better way exist to exclude "./"  and "." . it should the same

output like "ls" (without files)


find . \( -name . -o -prune \) -type d | sed "s|./||g" | sort |grep -v "\."


regards

Please use plain text.
Honored Contributor
Matti_Kurkela
Posts: 6,271
Registered: ‎12-02-2001
Message 2 of 6 (220 Views)

Re: list only directories

How about:

ls -F | grep '/$'

 

MK
Please use plain text.
Honored Contributor
Patrick Wallek
Posts: 13,714
Registered: ‎06-21-2000
Message 3 of 6 (217 Views)

Re: list only directories

How about:

 

# find . -type d ! \( -name . -o -name .. \)
./.ssh
./.sw
./.sw/sessions
./.sw/targets
./.sw/software
./bin
./.swa
./.swa/cache
./.swa/report
./DR
./progs
./progs/exe
./progs/memoryAllocation
./progs/memoryAllocation/progs
./progs/tapeinfo
./.elm
./Mail

 

Please use plain text.
Advisor
karthikbalu
Posts: 20
Registered: ‎10-16-2012
Message 4 of 6 (198 Views)

Re: list only directories

You can just use this below to list directories.

 

ls -l | grep ^d

 

 

Please use plain text.
Acclaimed Contributor
Dennis Handly
Posts: 24,742
Registered: ‎03-06-2006
Message 5 of 6 (195 Views)

Re: list only directories

>find . \( -name . -o -prune \) -type d
>but does a better way exist to exclude "./"  and "."

 

Yes:

$ find * -name . -o -prune  -type d -print

"*" gets rid if "./" and using -print (properly) gets rid of ".".  But "*" will fail if too many files.

Please use plain text.
Valued Contributor
support_billa
Posts: 192
Registered: ‎06-27-2011
Message 6 of 6 (191 Views)

Re: list only directories

 

this is the best solution :

find * -name . -o -prune  -type d -print

 

my comments to the another solutions :

 

@ Dennis Handly

find * -name . -o -prune  -type d -print

Perfect

@ "*" gets rid if "./" and using -print (properly) gets rid of ".".  
@ But "*" will fail if too many files.

this applikation exist approximately 250 directories , so it works perfect.
i also tested the "find" command with approximately 60.000 files and a lot of
subdirectories. it works also without problems.

@ Matti_Kurkela
ls -F | grep '/$'

i need another cmd to replace ending "/" like :
ls -F | grep '/$' | sed "s|/$||g"

@ karthikbalu
ls -l | grep ^d

i need another cmd  to get the directory like :
ls -l | grep ^d | awk '{ print $NF}'

@Patrick
find . -type d ! \( -name . -o -name .. \)

It includes also subdirectories like ./dir1/subdir2

better
find . -type d ! \( -name . -o -name .. \) -prune
but i also need another cmd to replace leading "./" like :
find . -type d ! \( -name . -o -name .. \) -prune |sed "s|^./||g"

regards

 

Please use plain text.
The opinions expressed above are the personal opinions of the authors, not of HP. By using this site, you accept the Terms of Use and Rules of Participation