Risposte:
Userei find dirname -not -empty -ls
, supponendo che GNU lo trovi.
ls
e hai usato find
;) Ho aumentato però ... È una soluzione adeguata
Questo è un lavoro per scoprire che non è abbastanza potente.
find -maxdepth 1 -size +0 -print
-maxdepth 1
- questo dice a find di cercare solo la directory corrente, rimuovere per cercare in tutte le directory secondarie o cambiare il numero per scendere di 2, 3 o più livelli.
-size +0
questo dice a find di cercare file con dimensioni maggiori di 0
byte. 0
può essere modificato in qualsiasi dimensione desiderata.
-print
dice a find di stampare l'intero percorso del file che trova
Modifica:
aggiunta tardiva: probabilmente dovresti anche aggiungere l' -type f
opzione sopra. Questo dice a find di trovare solo i file. E come notato nei commenti qui sotto, l' -print
interruttore non è davvero necessario.
-maxdepth 1
prima -size +0
. Inoltre -print
è l'azione predefinita, quindi non è necessaria.
find
variano molto in termini di opzioni valide e dove possono andare. GNU find
(che è terribilmente comune) si produrrà un messaggio di avviso se si mette -size
davanti -maxdepth
.
Ls non ha quasi alcuna opzione per filtrare i file: non è il suo lavoro. Il filtraggio dei file è il lavoro della shell per casi semplici (tramite globbing) e il lavoro di ricerca per casi complessi.
In zsh, il L
qualificatore globbing può conservare solo i file le cui dimensioni sono> 0 (il .
qualificatore si limita ai file normali):
ls *(.L+0)
Gli utenti di altre shell devono usare find. Con GNU find (come si trova principalmente su Linux):
find -maxdepth 1 -type f ! -empty -exec ls {} +
Un modo conforme a POSIX è:
find . -type f -size +0c -exec ls {} + -o -name . -o -prune
Se ls
non era solo un esempio e si limita intenzione ispezione visiva, è possibile ordinare in base alle dimensioni: ls -S
.