2012-04-09 19 views
37

Sto cercando un comando Unix per stampare i file con le sue dimensioni. L'ho usato ma non ha funzionato.Trova file con dimensioni in Unix

find . -size +10000k -print. 

Desidero stampare la dimensione del file insieme al nomefile/alla directory.

+2

quel comando mi da 'find: sconosciuto predicato '-print.'' presumo il' .' non è davvero lì. La precisione è importante. –

+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 pubblicare domande su Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

risposta

37
find . -size +10000k -exec ls -sd {} + 

Se la versione di find non accetterà la + notazione (che si comporta un po 'come xargs fa), allora si potrebbe utilizzare (GNU find e xargs, così find supporta probabilmente + comunque):

find . -size +10000k -print0 | xargs -0 ls -sd 

oppure è possibile sostituire + con \; (e vivere con la relativa inefficienza di questo), oppure si potrebbe vivere con problemi causati da spazi nei nomi e utilizzare il portatile:

find . -size +10000k -print | xargs ls -sd 

La -d sui comandi ls assicura che se una directory è mai trovato (improbabile, ma ...), quindi le informazioni di directory verrà stampato, non i file nella directory. E, se stai cercando file più di 1 MB (come suggerito da un commento ormai cancellato), devi regolare lo +10000k su 1000k o forse +1024k o +2048 (per blocchi da 512 byte, l'unità predefinita per -size) . Questo elencherà la dimensione e quindi il nome del file. È possibile evitare la necessità di -d aggiungendo -type f al comando find, naturalmente.

+0

grazie. Ho usato la ricerca . -size + 300000k -print | xargs ls -sd 2>/dev/null –

3

Dando per scontato che avete GNU trovare:

find . -size +10000k -printf '%s %f\n' 

Se si desidera una larghezza costante per il campo dimensioni, si può fare qualcosa di simile:

find . -size +10000k -printf '%10s %f\n' 

Nota che -size +1000k seleziona i file di almeno 10.240.000 byte (k è 1024, non 1000). Hai detto in un commento che desideri file più grandi di 1M; se questo è 1024 * 1024 byte, allora questo:

find . -size +1M ... 

farà il trucco - tranne che stampa anche la dimensione e il nome del file che sono esattamente 1024 * 1024 byte. Se ciò è importante, è possibile utilizzare:

find . -size +1048575c ... 

È necessario decidere quale criterio si desidera.

+0

Avresti bisogno di un 'c' dopo' + 1048575' per ottenere byte (caratteri) invece del valore predefinito di blocchi da 512 byte. –

+0

@JonathanLeffler: corretto, grazie! –

7

Trova può essere utilizzato per stampare la dimensione del file in byte con% s come printf. % h /% f stampa rispettivamente il prefisso e il nome file della directory. \ n forza una nuova riga.

Esempio

find . -size +10000k -printf "%h/%f,%s\n" 

uscita

./DOTT/extract/DOTT/TENTACLE.001,11358470 
./DOTT/Day Of The Tentacle.nrg,297308316 
./DOTT/foo.iso,297001116 
+0

Interessante. Questo dovrebbe essere documentato come estensione GNU (presumo) allo standard POSIX ['find'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html). –