Como excluo todos os arquivos menores que um determinado tamanho em todas as subpastas?

88

Eu tenho uma pasta com muitas subpastas contendo arquivos tif pequenos (menos de 160kb) que foram mesclados em arquivos PDF maiores, juntamente com alguns arquivos tif grandes com várias páginas.

Quero excluir todos os arquivos tif pequenos sem excluir os arquivos maiores (tif ou pdf) e manter a estrutura de diretórios. Como faço para fazer isso no Linux usando a linha de comando?

Façam
fonte

Respostas:

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

Execute o comando sem -deleteprimeiro verificar se os arquivos corretos foram encontrados.

Observe o -antes 160k. Apenas 160ksignifica exatamente 160 kilobytes. -160ksignifica menor que 160 kilobytes. +160ksignifica maior que 160 kilobytes.

As -type 'f'forças do comando para agir apenas em arquivos e pular diretórios. isso evitaria erros se o caminho contiver pastas com nomes que correspondam ao padrão *.tif.

Se você deseja filtrar tamanho em bytes (como em 160 bytes em vez de 160 kilobytes), então você tem que escrever como este: 160c. Se você acabou de escrever 160, será interpretado como 160 * 512 bytes. Este é um requisito estranho do POSIX. Leia aqui para obter mais detalhes: https://unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unit-512-bytes

lesmana
fonte
A página de manual do ubuntu parece mencionar isso. Logo abaixo da seção "TESTES": Argumentos numéricos podem ser especificados como + n para maior que n, -n para menor que n, n para exatamente n.
Juízes
1
obrigado. não me ocorreu que as informações possam estar em outro lugar da página de manual.
lesmana 12/09
É bom que este comando também funcione recursivamente. Meu caso de uso seria excluir arquivos .txt abaixo de 12kB.
Dom
não há necessidade de sudo?
Jean-François Gagnon
11
Para tamanhos em bytes, especifique 50c, não 50b ou 50!
Evengard