findaceita a typeopção de selecionar, por exemplo, apenas arquivos.
find /path/to/files -type f -mtime +10 -delete
Deixe de fora -deletepara mostrar o que seria excluído e, depois de verificar isso, vá em frente e execute o comando completo.
Isso seria executado apenas em arquivos, não em diretórios. Use -type dpara o inverso, listando apenas os diretórios que correspondem aos seus argumentos.
Opções adicionais
Você pode querer ler man find, pois há mais algumas opções que você poderá precisar no futuro. Por exemplo, -maxdepthpermitiria restringir apenas os itens encontrados a uma profundidade específica, por exemplo -maxdepth 0, não recursaria em subdiretórios.
Algumas observações
Gostaria de saber como o comando teria removido uma pasta, já que você não pode remover uma pasta rmapenas. Você precisaria rm -rdisso.
Além disso, /path/to/files*é confuso. Você quis dizer /path/to/files/ou espera que o curinga se expanda para vários nomes de arquivos e pastas?
Coloque as {}aspas simples, ou seja, '{}'para evitar que o nome do arquivo / diretório substituído seja interpretado pelo shell, assim como protegemos o ponto e vírgula com uma barra invertida.
Bem, existem muitas pastas em / path / to / files /, na verdade, eu gostaria de executar o mtime +10 -exec rm em cada uma dessas pastas, mas manter as próprias pastas, basicamente, eu gostaria de conseguir é excluir todas as arquivos com mais de 10 dias e mantenha todas as pastas. Eu sou um ataque desculpe newb que newbness :)
JoyIan Yee-Hernandez
Bem, lá vai você :) Basta fazer um find /path/to/files* -type f -mtime +10e ver o que seria produzido.
slhck
Sim, quando estiver em dúvida, não faça -exec, apenas veja o que encontrar primeiro.
Rob
2
@ JoyIanYee-Hernandez Você também pode usar o -deleteargumento para find, que exclui todos os arquivos e pastas, este último apenas se vazio. Implica -depth, ou seja, busca em profundidade.
Daniel Beck
11
@Kreker Então você precisa adicionar -mindepth 1para excluir o diretório pai.
slhck
5
Como nas respostas anteriores (+1 para ambos), o truque é usar o -type fpredicado.
Observe que em vez de -exec rm '{}'você também pode usar o -deletepredicado. Mas não faça isso. Com -exec rm '{}'você, você pode (e deve) fazer primeiro -exec echo rm '{}'para verificar se é isso que realmente deseja. Depois disso, execute novamente o comando sem o echo.
O uso -deleteé mais rápido (sem acréscimo fork()e execve()para cada arquivo), mas isso é arriscado porque -deletefunciona também como uma condição, portanto:
Eu estava lutando para acertar isso usando os scripts fornecidos acima e alguns outros scripts, especialmente quando os nomes de arquivos e pastas tinham nova linha ou espaços.
Finalmente tropeçamos no tmpreaper e tem funcionado muito bem para nós até agora.
Possui recursos como teste, que verifica os diretórios recursivamente e os lista. Capacidade de excluir links simbólicos, arquivos ou diretórios e também o modo de proteção para um determinado padrão ao excluir
find /path/to/files* -type f -mtime +10 -exec rm '{}' '+'
Isso será executado rmapenas uma vez no final, em vez de cada vez que um arquivo for encontrado.
( rmpode ser executado várias vezes se você tiver realmente muitos arquivos devido à limitação do comprimento da linha de comando, mas isso ainda é quase tão rápido quanto o uso -delete)
find /path/to/files* -type f -mtime +10
e ver o que seria produzido.-exec
, apenas veja o que encontrar primeiro.-delete
argumento parafind
, que exclui todos os arquivos e pastas, este último apenas se vazio. Implica-depth
, ou seja, busca em profundidade.-mindepth 1
para excluir o diretório pai.Como nas respostas anteriores (+1 para ambos), o truque é usar o
-type f
predicado.Observe que em vez de
-exec rm '{}'
você também pode usar o-delete
predicado. Mas não faça isso. Com-exec rm '{}'
você, você pode (e deve) fazer primeiro-exec echo rm '{}'
para verificar se é isso que realmente deseja. Depois disso, execute novamente o comando sem oecho
.O uso
-delete
é mais rápido (sem acréscimofork()
eexecve()
para cada arquivo), mas isso é arriscado porque-delete
funciona também como uma condição, portanto:mas se você apenas trocar argumentos:
Se você precisar
find
erm
trabalhar mais rápido para toneladas de arquivos, consulte ofind ... | xargs ... rm
idioma do UNIX.fonte
Você pode fazer isso facilmente com o comando find
O que restringe os resultados ao tipo de arquivo
fonte
Eu estava lutando para acertar isso usando os scripts fornecidos acima e alguns outros scripts, especialmente quando os nomes de arquivos e pastas tinham nova linha ou espaços.
Finalmente tropeçamos no tmpreaper e tem funcionado muito bem para nós até agora.
Link da fonte original
Possui recursos como teste, que verifica os diretórios recursivamente e os lista. Capacidade de excluir links simbólicos, arquivos ou diretórios e também o modo de proteção para um determinado padrão ao excluir
fonte
Para acelerar o comando, use em
'+'
vez de\;
Isso será executado
rm
apenas uma vez no final, em vez de cada vez que um arquivo for encontrado.(
rm
pode ser executado várias vezes se você tiver realmente muitos arquivos devido à limitação do comprimento da linha de comando, mas isso ainda é quase tão rápido quanto o uso-delete
)fonte
rm -f
find /path/to/files -type file -mtime -5
Isso excluirá os arquivos modificados dentro de 5 dias
rm -f
find /path/to/files -type file -mtime +5
Isso excluirá os arquivos modificados antes de 5 dias
Use `antes de localizar e no final após 5.
fonte