Situação: Você possui um diretório com arquivos de backup, mas eles estão ocupando muito espaço e você não precisa de ter todos os backups desde 1990, apenas os 5 últimos. Os exemplos abaixo mostram como fazer isso tanto no Windows quanto no Linux.
Vamos supor que você possui outros arquivos no diretório, mas quer apagar apenas os .zip
No Linux:
ls -tp *.zip | grep -v '/$' | tail -n +6 | tr '\n' '\0' | xargs -0 rm --
Explicando um pouco os comandos acima:
- ls -tp *.zip: Lista todos os arquivos .zip do diretório corrente, colocando os mais novos (data de modificação mais recente). Além disso exibe diretórios com uma barra (/) no final;
- grep -v ‘/$’: Remove os diretórios da lista recebida do comando anterior. (Se existir um link simbólico para um diretório, este comando não conseguirá remove-lo da lista);
- tail -n +6: Elimina os 5 primeiros itens da listagem, deixando apenas o arquivo de número 6 para frente. Desta forma, da lista de arquivos obtida na primeira parte deste comando, os 5 mais novos não estarão mais listados;
- tr ‘\n’ ‘\0’: converte os caracteres de quebra de linha (\n) com um delimitador (\0);
- xargs -0 rm —: processa a lista de arquivo em sequencias de argumentos de um tamanho aceitável para ser utilizado com o comando de remoção de arquivos. Após processa-la, envia a lista de arquivos para o comando rm. O argumento — serve para garantir que arquivos com nomes iniciados com – não sejam confundidos com argumentos do comando rm.
No Windows…
…Utilizando Batch:
for /f "skip=5 eol=: delims=" %%F in ('dir /b /o-d *.zip') do @del "%%F"
O comando acima é razoavelmente mais simples de explicar do que o comando do Linux. Neste comando, fazemos um simples for, ‘pulando’ os 5 primeiros registros. Os dados que alimentam este for é o comando dir. Para cada arquivo (%%F) será executado o comando del (@del).
… Utilizando PowerShell:
gci C:\temp\*.zip -Recurse | where{ -not $_.PsIsContainer } | sort CreationTime -desc | select -Skip 5 | Remove-Item -Force
O comando acima seleciona os arquivos de forma recursiva, filtra os que são diretórios, organiza a lista por data de criação, seleciona os arquivos por data de criação e (finalmente) os remove.
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022
Pingback: Apagando arquivos com mais de X dias (Linux/Bash) – Raccoon Ninja