Come posso elencare solo file non vuoti usando ls?


Risposte:


49

Userei find dirname -not -empty -ls, supponendo che GNU lo trovi.


1
Qualcuno ha cura di spiegare il downvote?
Daenyth,

Probabilmente perché il richiedente ha chiesto lse hai usato find;) Ho aumentato però ... È una soluzione adeguata
BloodPhilia

2
Se usi "find. -Not -empty -ls" includerà anche la directory corrente (cioè "." Nel suo output), per includere solo i file correnti usa "find. -Type f -not -empty -ls"
user672009

19

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.


1
Per evitare un avviso è necessario inserire -maxdepth 1prima -size +0. Inoltre -printè l'azione predefinita, quindi non è necessaria.
cYrus,

@cYrus - Nessun avvertimento per me (cygwin)
Nifle

Le implementazioni 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.
Telemaco,


8
ls -l | awk '{if ($5 != 0) print $9}'

Se hai intenzione di utilizzare ls, hai bisogno di un piccolo aiuto da awk.


7

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.


3
 $ find /* -type f ! -size 0

funzionerà meglio se vuoi tutti i file non vuoti, piuttosto che solo le directory.


1

Bash 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.