quarta-feira, 23 de janeiro de 2019

Como apagar todos os arquivos, exceto os n mais recentes

Muitas vezes apaguei arquivos antigos com a opção mtime do find, mas agora enfrentei um caso um pouco diferente. Eu precisava deixar 5 cópias de backup numa pasta.

O primeiro passo é enumerar o que é preciso apagar:

ls -1t | tail -n +5
ls -1tr | head -n -5

A opção r do ls inverte a lista e, consequentemente, o tail precisa ser trocado para head.

Essa combinação imprime os arquivos por ordem crescente de data e remove os 5 últimos (os 5 mais recentes). Depois, é preciso escolher a forma de processar a lista.

Uma opção óbvia é o xargs:

ls -1t | tail -n +5 | xargs -d '\n' rm -f --
ls -1tr | head -n -5 | xargs -d '\n' rm -f --

Mas o aninhamento de expressões do shell pode ajudar bastante:

rm -f $(ls -1t | tail -n +5)
rm -f $(ls -1t | head -n -5)

Se for preciso executar o comando numa pasta diferente da atual, basta incluir o caminho no ls:

ls -1dt /var/log/* | tail -n +5

A opção -d evita que o ls tente exibir o conteúdo de subdiretórios; apenas o nome do subdiretório é incluído.

Nenhum comentário:

Postar um comentário