Come posso eliminare tutti i file più piccoli di una determinata dimensione in tutte le sottocartelle?


88

Ho una cartella con molte sottocartelle contenenti piccoli file tif (meno di 160kb) che sono stati uniti in file PDF più grandi, insieme ad alcuni grandi file tif multi-pagina.

Voglio eliminare tutti i piccoli file tif senza eliminare i file più grandi (tif o pdf) e conservare la struttura della directory. Come posso procedere su Linux usando la riga di comando?

Risposte:


155
find . -name "*.tif" -type 'f' -size -160k -delete

Esegui il comando senza -deleteprima verificare che siano stati trovati i file corretti.

Nota il -prima 160k. Basta 160ksignifica esattamente 160 kilobyte. -160ksignifica più piccolo di 160 kilobyte. +160ksignifica più di 160 kilobyte.

Il -type 'f'comando impone il comando di agire solo sui file e saltare le directory. questo eviterebbe errori se il percorso contiene cartelle con nomi che corrispondono al modello *.tif.

Se si desidera filtrare dimensione in byte (come in 160 byte invece di 160 kilobyte), allora dovete scrivere in questo modo: 160c. Se si scrive 160, verrà interpretato come 160 * 512 byte. Questo è uno strano requisito di POSIX. Leggi qui per maggiori dettagli: https://unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unit-512-bytes


La pagina man di Ubuntu sembra menzionarlo. Appena sotto la sezione "PROVE": gli argomenti numerici possono essere specificati come + n per maggiore di n, -n per minore di n, n per esattamente n.
jdg,

1
Grazie. non mi è venuto in mente che l'informazione potesse essere altrove nella pagina di manuale.
lesmana,

È bello che questo comando funzioni anche in modo ricorsivo. Il mio caso d'uso sarebbe quello di eliminare i file .txt sotto i 12kB.
Dom

non c'è bisogno di sudo?
Jean-François Gagnon,

11
Per le dimensioni in byte, specificare 50c, non 50b o ​​50!
Evengard,
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.