Observe que isso recursivamente será subdividido em subdiretórios e excluirá incondicionalmente todos os arquivos menores que 1 megabyte. Seja cuidadoso.
@DanielAndersson: findrestringe 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. findinvocará várias instâncias, rmse necessário. E tenho certeza de que caracteres especiais são tratados corretamente, incluindo caracteres de nova linha. Prefiro -exec rmmais -deletepor motivos de flexibilidade - como exemplo, o último não oferece nenhuma maneira de excluir arquivos protegidos contra gravação.
Sven Marnach 13/02/12
1
@ Invoker: Eu reverti sua alteração, pois estava incorreta. -1Msignifica 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.
Sven Marnach
2
Para quem estiver interessado, se você quiser remover todos os arquivos maiores que 1 M, use o comando find . -type f -size +1M -exec rm {} +. Observe o + 1 milhão em vez de -1 milhão.
Eu não acho que precisamos hífen a partir de 1 milhão.
Invoker 05/10
2
@ Invoker, acredito que o -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.
Chessofnerd
Sim, você está certo, meu mal
Invoker
2
Apenas pela variedade e um possível ganho de desempenho (provavelmente marginal):
find <directory>-type f -size -1M-print0 | xargs -0 rm
Como isso deve ser mais rápido? Inicia um xargsprocesso adicional .
Sven Marnach 8/12
Agora você pode ter duas CPUs disputando o mesmo dispositivo de bloco! Mais sensatamente, as operações stat / readdir não são bloqueadas de forma síncrona pela operação de desvinculação. Se isso é provável que seja melhor, obviamente, depende do tamanho da subárvore, número de arquivos, o dispositivo etc.
As respostas no SO devem ser independentes - não publique um mero link. (Além disso, o código na pós ligada elimina ficheiros vazias em vez de arquivos menores do que 1 M.)
Sven Marnach
@SvenMarnach não podemos usar $ file_size <1M no link de exemplo de código fornecido.
Não, não podemos, pois o shell não vai entender 1M.
Sven Marnach 8/12
Por 1M, eu quis dizer 1048576 a conversão de 1 MB em byte
1
Bem, se você testar se isso realmente funciona e copiar o código para sua resposta, isso poderá se tornar uma resposta SO.
Respostas:
Isso pode ser feito com
find
:Observe que isso recursivamente será subdividido em subdiretórios e excluirá incondicionalmente todos os arquivos menores que 1 megabyte. Seja cuidadoso.
fonte
find
find
. :)find
restringe o número de argumentos ao processo chamado para se ajustar aos limites do sistema, em contraste com orm *
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:
fonte
-
sinal seja um sinal de menos que significa "menos de 1 milhão". Se você executarfind <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):
fonte
xargs
processo adicional .Experimentar
fonte
\;
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.
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.
fonte
1M
.