Risposte:
Questo può essere fatto con find:
find . -type f -size -1M -exec rm {} +
Si noti che questo ricadrà ricorsivamente nelle sottodirectory e eliminerà incondizionatamente tutti i file di dimensioni inferiori a 1 megabyte. Stai attento.
find. :)
findlimita il numero di argomenti al processo chiamato per adattarsi ai limiti del sistema, al contrario rm *, che è garantito come una singola chiamata di processo . findinvocherà più istanze di rmse necessario. E sono abbastanza sicuro che i caratteri speciali siano trattati correttamente, inclusi i caratteri di nuova riga. Preferisco -exec rmoltre -deleteper motivi di flessibilità: ad esempio, quest'ultimo non offre alcun modo per eliminare i file protetti da scrittura.
-1Msignifica meno di un megabyte come desiderato. La tua versione eliminerebbe tutti i file con esattamente un megabyte di dimensioni, il che sembra un'operazione alquanto inutile.
find . -type f -size +1M -exec rm {} +. Nota + 1M invece di -1M.
Questo dovrebbe fare il lavoro:
$ find <directory> -type f -size -1M -delete
-segno sia un segno meno che significa "meno di 1 m". Se esegui find <directory> -type f -size +1M -delete, eliminerai tutti i file più grandi di 1 milione.
Solo per varietà e un possibile (probabilmente marginale) aumento delle prestazioni:
find <directory> -type f -size -1M -print0 | xargs -0 rm
xargsprocesso.
Puoi controllare questo link http://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/ , ha esattamente quello che vuoi.
for file in *;
do
file_size=$(du $file | awk '{print $1}');
if [ $file_size == 0 ]; then
echo "Deleting empty file $file with file size $file_size!";
echo "rm -f $file";
fi;
done
È possibile scorrere tutti i file con un ciclo for e quindi usare du e awk per trovare le dimensioni del file come nell'esempio sopra.
1M.