Risposte:
Userei find dirname -not -empty -ls, supponendo che GNU lo trovi.
lse 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 +0questo dice a find di cercare file con dimensioni maggiori di 0byte. 0può 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 fopzione sopra. Questo dice a find di trovare solo i file. E come notato nei commenti qui sotto, l' -printinterruttore non è davvero necessario.
-maxdepth 1prima -size +0. Inoltre -printè l'azione predefinita, quindi non è necessaria.
findvariano molto in termini di opzioni valide e dove possono andare. GNU find(che è terribilmente comune) si produrrà un messaggio di avviso se si mette -sizedavanti -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 Lqualificatore 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 lsnon era solo un esempio e si limita intenzione ispezione visiva, è possibile ordinare in base alle dimensioni: ls -S.