Encontrei o comando para excluir arquivos com mais de 5 dias em uma pasta
find /path/to/files* -mtime +5 -exec rm {} \;
Mas como também faço isso para subdiretórios nessa pasta?
files
find
rm
timestamps
Teddy291
fonte
fonte
find /path/to -type d -empty -delete
rm test one
. (Que excluirá um arquivo chamado "teste" e um arquivo chamado "um", mas não um arquivo chamado "teste um"). Dica: -delete or -print0find
para evitar problemas com caracteres especiais, conforme mencionado na primeira linha da resposta. Por exemplo:find /path/to/files/ -exec somecommand '{}' \;
Respostas:
Cuidado com nomes de arquivos especiais (espaços, aspas) ao canalizar para rm.
Existe uma alternativa segura - a opção -delete :
É isso, nenhuma chamada rm separada e você não precisa se preocupar com nomes de arquivos.
Substitua
-delete
por-depth -print
para testar este comando antes de executá-lo (-delete
implica-depth
).fonte
-type f
para excluir apenas os arquivos (e manter sub-diretórios)find /path/to/dir\ with\ spaces/ -mindepth 1 -mtime +5 -delete
?find
argumento é um filtro que usa o resultado do filtro anterior como entrada. Portanto, certifique-se de adicionar -delete como o último argumento. IE:find . -delete -mtime +5
excluirá TUDO no caminho atual.Observe que este comando não funcionará quando encontrar muitos arquivos. Irá gerar um erro como:
Significando que o limite da chamada do sistema exec no comprimento de uma linha de comando foi excedido. Em vez de executar rm dessa maneira, é muito mais eficiente usar o xargs . Aqui está um exemplo que funciona:
Isso removerá todos os arquivos (tipo f) modificados há mais de 14 dias em / root / Maildir / recursivamente a partir daí e em profundidade (mindepth 1). Veja o manual de localização para mais opções .
fonte
find /root/Maildir/ -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm --
É o mesmo. Você apenas precisa fornecer o diretório pai em vez do prefixo dos arquivos. No seu exemplo, seria:
Isso excluirá todos os arquivos anteriores a 5 dias
/path/to
e seus subdiretórios.Para excluir subdiretórios vazios, consulte o comentário do @Costas acima.
fonte
+
nesse caso. - 2) melhor escrever-exec rm '{}' +
para afastar o mal dos arquivos com caracteres especiais (espaços, novas linhas, etc ...) em seu nome.fonte