2012-11-08 16 views
30

Come posso visualizzare tutti i file superiori a 10k byte nella mia directory corrente e le sue sottodirectory.Elenca i file su una dimensione specifica nella directory corrente e in tutte le sottodirectory

Provato ls -size +10k ma quello non ha funzionato.

+0

, la prego di estendere su questa questione, o almeno spiegare perché le due soluzioni che sono state pubblicate - e di lavoro, non sono appropriate per il vostro compito. (modifica: aggiunto per favore) – matchew

+1

'ls' non ha opzioni per filtrare l'output per dimensione. Ha un'opzione '--size' (senza argomenti) che stampa le dimensioni di ogni file in blocchi. A proposito, '-size + 10k' sembra una sintassi che viene usata con' find'. – doubleDown

+0

Stack Overflow è un sito per domande di programmazione e sviluppo. Questa domanda sembra essere fuori tema perché non riguarda la programmazione o lo sviluppo. Vedi [Quali argomenti posso chiedere qui] (http://stackoverflow.com/help/on-topic) nel Centro assistenza. Forse [Super User] (http://superuser.com/) o [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) sarebbe un posto migliore dove chiedere. Vedi anche [Dove posso inserire domande su Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

risposta

64

find . -size +10k -exec ls -lh {} \+

la prima parte di questo è identico a @sputnicks rispondere, e sucesffully trova tutti i file nella directory oltre 10k (non confondere k con K), la mia aggiunta, la seconda parte viene eseguita ls -lh o ls che li sts (-l) i file di dimensioni leggibili dall'uomo (-h). annulla la h se preferisci. naturalmente il {} è il file stesso, e il \+ è semplicemente un'alternativa al \;

che in pratica \; sarebbe ripetere o:

ls -l found.file; ls -l found.file.2; ls -l found.file.3

dove \+ visualizzazione come una dichiarazione o:

ls -l found.file found.file.2 found.file.3

altro su \; vs + con find

Additionaly, è possibile che l'elenco ordinato per dimensione. Che è relativamente facile da realizzare. Avrei a scelta -s di ls, così ls -ls e poi pipe a sort -n per ordinare numericamente

che diventerebbe:

find . -size +10k -exec ls -ls {} \+ | sort -n

o in ordine inverso aggiungi -r:

find . -size +10k -exec ls -ls {} \+ | sort -nr

infine, il titolo dice find maggiore file nella directory. È possibile farlo collegando il codice a tail

find . -size +10k -exec ls -ls {} \+ | sort -n | tail -1 troverebbe il file più grande nella directory e nelle sue sottodirectory.

nota si potrebbe anche ordinare i file per dimensione usando -S, e negare la necessità di ordinamento. ma per trovare il file più grande che avrebbe bisogno di usare la testa in modo

find . -size +10k -exec ls -lS {} \+ | head -1

il vantaggio di farlo con -S e non sort è uno, non c'è bisogno di digitare sort -n e due è anche possibile utilizzare -h l'opzione di dimensioni leggibili.che è uno dei miei preferiti da usare, ma non è disponibile con versisions precedenti di ls, ad esempio, abbiamo un vecchio server CentOS 4 sul posto di lavoro che non ha -h

+0

Non è assolutamente questo, mi dispiace. – eveo

+0

ho provato questo su una directory senza sottodirectory e ha funzionato perfettamente. fammi provare su una directory diversa. h/o - 'find' è quello che stai cercando, btw. – matchew

+0

ok, l'ho provato su una directory diversa. questo è quello che stai cercando. Puoi spiegare perché questo non è assolutamente questo? – matchew

9

Prova a fare questo:

find . -size +10k -ls 

E se si desidera utilizzare il binario ls:

find . -size +10k -exec ls -l {} \; 
+0

Voglio visualizzarli con ls non trovato. 'ls -l. -size + 10k' non ha funzionato. – eveo

+0

Vedere il mio post modificato –

+0

Ancora non ha funzionato, questo è per un compito. "La tua directory corrente è dir. Mostra tutti i file all'interno di dir (ed è sottodirectory) che sono più grandi di 10k byte." – eveo

1

È possibile utilizzare ls così:

ls -lR | egrep -v '^d' | awk '$5>10240{print}' 

Spiegazione:

ls -lR   # list recursivly 
egrep -v '^d' # only print lines which do not start with a 'd'. (files) 

solo le linee di stampa in cui la quinta colonna (dimensione) è maggiore che 10240 byte:

awk '$5>10240{print}' 
+0

Troppo complesso, non le risposte. Grazie comunque. – eveo

3

io aggiungo a @matchew risposta (non punti karma abbastanza di commentare):

find . -size +10k -type f -maxdepth 1 -exec ls -lh {} \; > myLogFile.txt 

tipo f: specificare il tipo di file regolari

-maxdepth 1: assicurarsi che trovare solo i file nella directory corrente

+0

(come chiamiamo "reputazione", non "karma" .Questo non è reddit) –

6

Mi rendo conto che il compito è probabilmente finito da tempo. Per chiunque altro:

Si sta complicando eccessivamente.

find . -size +10k 
Problemi correlati