Respostas:
Isso pode ser feito com find
:
find . -type f -size -1M -exec rm {} +
Observe que isso recursivamente será subdividido em subdiretórios e excluirá incondicionalmente todos os arquivos menores que 1 megabyte. Seja cuidadoso.
find
. :)
find
restringe o número de argumentos ao processo chamado para se ajustar aos limites do sistema, em contraste com o rm *
que é garantido como uma invocação de processo único. find
invocará várias instâncias, rm
se necessário. E tenho certeza de que caracteres especiais são tratados corretamente, incluindo caracteres de nova linha. Prefiro -exec rm
mais -delete
por motivos de flexibilidade - como exemplo, o último não oferece nenhuma maneira de excluir arquivos protegidos contra gravação.
-1M
significa menos de um megabyte, conforme desejado. Sua versão excluiria todos os arquivos com exatamente um megabyte de tamanho, o que parece ser uma operação um tanto inútil.
find . -type f -size +1M -exec rm {} +
. Observe o + 1 milhão em vez de -1 milhão.
Isso deve fazer o trabalho:
$ find <directory> -type f -size -1M -delete
-
sinal seja um sinal de menos que significa "menos de 1 milhão". Se você executar find <directory> -type f -size +1M -delete
, excluirá todos os arquivos maiores que 1 milhão.
Apenas pela variedade e um possível ganho de desempenho (provavelmente marginal):
find <directory> -type f -size -1M -print0 | xargs -0 rm
xargs
processo adicional .
Experimentar
encontrar . -size -1M -exec rm {} \;
\;
no final, em vez de+
Você pode conferir este link http://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/ , que tem exatamente o que você deseja.
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
Você pode percorrer todos os arquivos com um loop for e, em seguida, usar du e awk para encontrar o tamanho do arquivo como no exemplo acima.
1M
.