Come visualizzare dimensioni di file "leggibili dall'uomo" nei risultati di ricerca?


11

Sto cercando di trovare tutti i file di grandi dimensioni sul mio server Centos. Per farlo sto usando:

find / -maxdepth 10 -size +100000 -ls

Ho provato a cambiare -lsin -lshma non è permesso.

Come posso visualizzare questi risultati con dimensioni leggibili dall'uomo (usando i suffissi k, M, ...)?


Qual è la tua definizione di lettura umana? Per me è abbastanza leggibile dall'uomo.
arte

Dovresti provare fileutility con find.
Ramesh,

@manatwork kb, mb, gb
blarg

Risposte:


10

findnon ha opzioni sofisticate come ls. Se vuoi ls -h, devi chiamare ls.

find / -maxdepth 10 -size +100000 -exec ls -lh {} +

Raccomando l' -xdevopzione per evitare di ricorrere in altri filesystem, il che sarebbe inutile se ti preoccupi dello spazio su disco.

find / -xdev -maxdepth 10 -size +100000 -exec ls -lh {} +

Se usi zsh come shell, invece di usare find, puoi usare i qualificatori glob. Limitare le dimensioni del file è semplice: Lseguito da una dimensione; la dimensione può avere un'unità opzionale prima del numero. Se non ti interessa la profondità massima, puoi utilizzare **/per ricorrere nelle sottodirectory. Se ti interessa la massima profondità, è più ingombrante in quanto i modelli zsh glob non hanno un modo di esprimere "al massimo n occorrenze". Per evitare la ricorsione tra dispositivi, utilizzare il dqualificatore glob; è necessario trovare il numero del dispositivo, che è possibile visualizzare con il statcomando in Linux ( stat -c %d /per visualizzare solo il numero) o con il proprio statbuilt-in di zsh (eseguire zmodload zsh/statper caricarlo).

ls -lh /**/*(L+M99d$(stat -c %d /))

4

Il comando che stai provando è leggibile per me. Tuttavia, è possibile utilizzare l'utilità di file con la ricerca come di seguito.

find / -maxdepth 10 -size +100000 -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print

Un altro modo per farlo è usare il comando seguente.

du -BM / | sort -nr

Il comando sopra ti darà i file nella dimensione ordinata.

Se si utilizzano coreutils> 7.5 , è possibile emettere il comando seguente per elencare i file in base alle dimensioni.

du -ah / | grep -v "/$" | sort -h

Nella mia macchina, non avevo l' sort -hopzione disponibile.

Come hai menzionato nel commento, il tuo formato leggibile è che il file dovrebbe avere le dimensioni in kb , mb o gb . Vorrei andare con il secondo comando che avevo pubblicato come risposta. L'output che ho ottenuto quando l'ho usato nel mio sistema è,

du -BM /home/ramesh/chk1/ | sort -nr

50M     /home/ramesh/chk1/
21M     /home/ramesh/chk1/Hierarchical_Clustering_Working
3M      /home/ramesh/chk1/checking_files
1M      /home/ramesh/chk1/checking/checking2
1M      /home/ramesh/chk1/checking/checking1
1M      /home/ramesh/chk1/checking/asdf
1M      /home/ramesh/chk1/checking

C'è un modo per impostare un limite inferiore per il tuo secondo comando? I file più grandi appaiono in alto e scompaiono rapidamente dalla parte superiore della shell EDIT - Vedo che devi solo rimuovere r
blarg

È possibile reindirizzare l'output su un file aggiungendo > outputal comando. Quindi, puoi aprire il file e visualizzare l'output come desideri :)
Ramesh,

Vedo che questo visualizza anche le cartelle, mentre io sono solo dopo i file
blarg

du -a --max-depth=10 / | sort -rnè la stretta che mi è venuta in mente. Tuttavia, in questo caso, non visualizzerà le dimensioni in KB, MB o GB.
Ramesh,

1

Penso che ciò che cerchi sia più simile al seguente.

find / -maxdepth 10 -size +100000 -exec ls -lah {} + 

Il -execconsente di eseguire un comando e l' {}è sostituito con il risultato del ritrovamento. Infine +è per dire che trova la fine del comando ed è necessario.


2
In realtà è del tutto inutile citare il {}qui. Le virgolette singole nel comando sono per la shell ma la shell non vedrà mai il ls -lah <args...>comando - vede {}, che non ha bisogno di essere quotato. È findquello che vede ls -lah {}ed è findche espande il {}, e come implicito dal nome -execdell'opzione, findusa direttamente una exec*chiamata di sistema sugli argomenti, quindi non ci saranno problemi con gli spazi perché findnon ha intenzione di dividere le parole sui tuoi nomi di file.
jw013,

1
L' -aopzione per lsnon è necessaria poiché gli argomenti dovrebbero essere file e non directory. GNU trova gli usi ls -dilsper l' -lsopzione, quindi per replicare più da vicino sarebbe ls -dilsh.
jw013,

man find fornisce quanto segue per il primo esempio di utilizzo di -exec : find . -type f -exec file '{}' \; esegue il file su ogni file all'interno o al di sotto della directory corrente. Si noti che le parentesi graffe sono racchiuse tra virgolette singole per proteggerle dall'interpretazione come punteggiatura di script shell. Il punto e virgola è similmente protetto dall'uso di una barra rovesciata, anche se in quel caso avrebbe potuto essere usato anche virgolette singole.
Tim Hughes,

1
La pagina man sta semplicemente sostenendo alcune precauzioni inutili. Non farà male, ma non sono a conoscenza di alcuna shell che richiede {}di essere quotata.
jw013,
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.