Newsgroup: it.comp.os.linux.iniziare
Titolo: listare solo directory

Esiste un modo piu' spiccio per avere l'elenco delle sole directory presenti,
dalla shell dei comandi?
Apparte usare il classico:       ls -l | grep ^d
Se non erro, anni e anni fa, avevo visto un modo associato ad un alias della
shell, che lo faceva in modo piu' furbo, mantenendo i colori...
Non mi serve la ricerca ricorsiva, solo quelle presenti al livello in cui sono.
For my real address use the X-SPAM header
-- 
+---------------------------------------------------------------------------+
|Al termine delle elezioni,la madre superiora fa la conta dei voti:         |
|DC, DC, DC,... PPP. Chiama subito suor Maddalena per le spiegazioni...     |
|Si era rotta la punta della matita, ed ho scritto: PORCA PUTTANA LA PUNTA! |
+-----#8---------------------Campagna contro le pubblicita` idiote.---------+

 dalla shell dei comandi?
find . -maxdepth 1 -type d
-- 
Flavio Visentin
Scientists have finally discovered what's wrong with the female brain:
On the left side, there is nothing right, and on the right side, there
is nothing left.

 sono.
Puoi mettere quel comando in un alias:
alias lsd='ls -l | grep ^d'
o, ancora meglio, in una funzione, che e' estendibile perche' puoi passare
dei parametri:
lsd() { ls -l | grep '^d'; }
Per mantenere i colori, usa ls --color=always, anche se te lo sconsiglio
perche' cambia cio' che viene visto da grep.
Un'altro metodo e' utilizzare find . -maxdepth 1 -mindepth 1 -type d, ma non
so se e' piu' comodo del ls -l | grep ...

 
forse questo?
$ ls -1F | grep "/$"

 find . -maxdepth 1 -type d
Un poco disordinato, ho aggiunto anche un sort, che male non fa.
Idea buona comunque. Gazie
For my real address use the X-SPAM header
-- 
+---------------------------------------------------------------------------+
|                   Per informazioni e suggerimenti                         |
|                            
www.youporn.com
                                |
+-----#10--------------------Campagna contro le pubblicita` idiote.---------+

 ...
Sí esiste.
tree -d -L 1
man tree

 perche' cambia cio' che viene visto da grep.
Ho messo:
alias lsd='ls -l --color=always | grep ^d'
e funziona.
Per i colori, capisco il tuo dubbio, ma tieni presente che il test se una riga
si riferisce ad una directory, avviene al primo carattere che e' sempre e
comunque una "d" nera.
Passando il comando con LESS, che visualizza i comandi ansi per i colori:
drwxr-xr-x 54 big  big       4096 2009-02-07 19:11 ESC[01;34mDOS GamesESC[00m
si vede chiaramente che l'influenza dei comandi per il cambio colore si attesta
alla sola parte del nome della directory e non sulla parte iniziale con
attributi, permessi e proprietari, inoltre alla fine della riga, il colore
viene sempre disattivato, per cui direi che non debbano sussistere problemi.
For my real address use the X-SPAM header
-- 
+---------------------------------------------------------------------------+


 $ ls -1F | grep "/$"
con --color=auto (l'alias di default di debian) non colora
occorre mettere --color=always
$ ls -F1 --color=always | grep "/$"
cosi' scrive effettivamente in output i caratteri di escape dei colori, 
e quindi passano nella pipe.
$ hexdump -c <(ls --color=always -d / )
0000000 033   [   0   0   m 033   [   0   1   ;   3   4   m   / 033   [
0000010   0   0   m   /  \n 033   [   m
0000018
$ hexdump -c <(ls --color=auto -d / )
0000000   /   /  \n
0000003

 
poi dipende da cosa cerchi
se volevi avere tutti i permessi, le date e le utenze, usi ls -l e 
sfrutti la "d" inziale
se ti basta il nome della direcotry, usi ls -F e sfrutti la "/" finale
ma di sicuro avevi gia' capito da te
ciao

 ma di sicuro avevi gia' capito da te
Ottimo anche il tuo metodo. Mi basta solo la directory.
For my real address use the X-SPAM header
-- 
+---------------------------------------------------------------------------+
|      Informazioni traffico  899 04 21 21                                  |
|                                                                           |
+-----#14--------------------Campagna contro le pubblicita` idiote.---------+

 tree -d -L 1
Ecco, non era installato di default, e nenneno me lo ricordavo.
Ora che lo hai scritto mi hai fatto ricordare proprio quello che cercavo.
L'ho messo in   .bashrc:
alias lsd='tree -d -L 1'
For my real address use the X-SPAM header
-- 
+---------------------------------------------------------------------------+


 sussistere problemi.
Se ti limiti a listare le directory, probaabilmente no, ma supponi che un
giorno tu voglia fare
lsd | grep moo
per trovare le directory con moo nel nome. lsd invia un output "colorato" a
grep, che potrebbe comportarsi in modo molto strano. Guarda questo esempio:
$ lsd
drwxr-xr-x  2 antani users   4096 2008-12-01 15:51 ooo
drwxr-xr-x  2 antani users   4096 2008-10-30 11:48 moo
drwxr-xr-x  2 antani users   4096 2008-10-30 11:48 dir1
(lsd colora l'output, anche se ovviamente qui sopra non si vede) 
$ lsd | grep moo
drwxr-xr-x  2 antani users   4096 2008-12-01 15:51 ooo
drwxr-xr-x  2 antani users   4096 2008-10-30 11:48 moo
Capire perche' viene elencata anche la directory "ooo" (facile), e i
possibili rimedi (facili), te lo lascio come esercizio...

 possibili rimedi (facili), te lo lascio come esercizio...
Vedro' di capirci.
Comunque, mi bastava solo listare le directory.
Ciao.
For my real address use the X-SPAM header
-- 
+---------------------------------------------------------------------------+
| Da una E-Mail:                                                            |
| La sig.ra MICHELA è assediata da un cliente per un'urgente commessa che   |
| prevede la rettifica interna                                              |
+-----#18--------------------Campagna contro le pubblicita` idiote.---------+

 
a me la soluzione non sembra ne facile ne possibile.
se i colori passano per la pipe, poi non li puoi piu' levare, altrimenti 
non li vedi piu'.
quindi, qualsiasi cosa scrivi nella funzione, non potrai mai lanciarla 
con un semplice "lsd | grep m"
pero' l'idea di avere una funzione lsd mi sembra geniale.
anzi... LSD!
P.S.
non solo
i caratteri di escape per i colori sono dipendenti dal terminale
se volessi creare una funzione portabile, dovresti andare a leggere in 
terminfo la definizione di setaf e setab corretta per il terminale in uso
$ TERM=xterm infocmp | grep -o "seta[fb]=.*,"
setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
$ TERM=gnome-256color infocmp | grep -o "seta[fb]=.*,"
setab=\E[48;5;%p1%dm,
setaf=\E[38;5;%p1%dm,
$ TERM=konsole-16color infocmp | grep -o "seta[fb]=.*,"
setab=\E[%?%p1%{8}%<%t%p1%'('%+%e%p1%{92}%+%;%dm,
setaf=\E[%?%p1%{8}%<%t%p1%{30}%+%e%p1%'R'%+%;%dm,
la maggiorparte dei terminali, per i colori, usano la prima sequenza 
(linux, xterm, xterm-color...), ma non tutti

 (linux, xterm, xterm-color...), ma non tutti
rettifico
smebra che ls --color=always usi sempre la stessa sequenza di escape 
indipendentemente dal terminale
$ hexdump -c <(TERM=xterm /bin/ls -d / --color=always)
0000000 033   [   0   0   m 033   [   0   1   ;   3   4   m   / 033   [
0000010   0   0   m  \n 033   [   m
0000017
$ hexdump -c <(TERM=dumb /bin/ls -d / --color=always)
0000000 033   [   0   0   m 033   [   0   1   ;   3   4   m   / 033   [
0000010   0   0   m  \n 033   [   m
0000017
quindi se ne sono fregati altamente di terminfo, e hanno usato una 
sequenza di caratteri fissa.
comodo
probabilmente per i colori si puo' fare cosi'.
se arrivassero alla stessa compatibilita' anche con i movimenti del 
cursore e i carateri grafici, si potrebbe buttare via tutto quel kaos 
con terminfo e usare sequenza fisse sempre.
chissa... nel futuro...



I comandi di cui stai facendo l'hexdump dell'output scrivono in una pipe,
non in un terminale. 
Comunque le sequenze usate sono quelle ansi, con cui tutti i terminali
moderni dovrebbero comunque essere compatibili. 
Il comando ls usa la variabile d'ambiente LS_COLORS per i colori, che nelle
distro principali (perlomeno quelle che conosco io) viene impostata nei
file di inizializzazione della shell con un comando tipo eval $(dircolors),
o una qualche variazione, che a sua volta legge il file /etc/DIR_COLORS (o
~/.dir_colors se ricordo bene).

 presenti, dalla shell dei comandi?
non ci crederai, ma "ls -d */" funziona e salva i colori
-- 
ATTACKED BY ATOMIC BOMB 12N 12W. EXPLODING. U-849.

 non ci crederai, ma "ls -d */" funziona e salva i colori
Ottima idea. A volte non si pensa alle cose piu' semplici...