Apagando arquivos antigos no Powershell com uma linha... passo a passo

Olá, Essa veio do fórum: como apagar arquivos antigos? Essa questão é velha, sempre aparece, e existem 6x10^23 respostas. Resolvi postar uma interessante que mandei na lista, mas mostrando passo a passo como foi meu raciocínio ao criar o "brinquedo": assim eu respondo a dúvida de um monte de gente que ainda não achou outras soluções (aqui mesmo no blog eu já postei uma solução com VBScript, e no forum surgiu uma solução com o Purge.exe) ao mesmo tempo que explico como montar uma linha de comando no Powershell. 1) Comece listando todos os arquivos, na pasta que deseja limpar, com o comando get-childitem (é mais fácil dir ou ls. Uso o ls porque estou acostumado também com outro SO): alonenomad@monad Meus Documentos\> ls Directory: Microsoft.PowerShell.Core\FileSystem::D:\Vinicius\Meus Documentos Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 20/11/2006 11:12 Apresentações d---- 22/5/2006 0:14 BVRP Software d---- 15/12/2004 17:12 CS sounds d---- 12/11/2005 0:23 EESC - Biblioteca d---- 8/9/2006 23:06 Faculdade d---- 25/6/2006 18:38 Meus arquivos recebidos d---- 15/5/2006 0:41 Microsoft Articles d-r-- 5/11/2006 16:58 Minhas imagens d---- 20/8/2006 11:40 My Virtual Machines 2) Agora filtre os antigos com o where-object (também conhecido como where ou como ?): alonenomad@monad Meus Documentos\> ls | where {$_.lastwritetime -lt (date).adddays(-5)} Directory: Microsoft.PowerShell.Core\FileSystem::D:\Vinicius\Meus Documentos Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 20/11/2006 11:12 Apresentações d---- 22/5/2006 0:14 BVRP Software d---- 15/12/2004 17:12 CS sounds d---- 12/11/2005 0:23 EESC - Biblioteca d---- 8/9/2006 23:06 Faculdade d---- 25/6/2006 18:38 Meus arquivos recebidos d---- 15/5/2006 0:41 Microsoft Articles d-r-- 5/11/2006 16:58 Minhas imagens d---- 20/8/2006 11:40 My Virtual Machines Note que esse where foi mais complicado. Dentro do where, eu só mostro os arquivos cuja data de última escrita é menor que hoje - 5 dias. Ou seja, pego arquivos antigos. Pra fazer isso, eu me utilizo do $_, a variável que representa o próprio arquivo e a propriedade lastwritetime. Além disso, para fazer a conta com a data atual eu uso (date).addDays(-5), que corresponde ao comando get-date, que retorna a data/hora atual, e uso o método addDays, que soma dias nessa data... soma, com menos 5 dias. Depois é só comparar com o -lt que corresponde a Less Than, ou menor que, no Powershell. Cuidado... você não pode comparar simplesmente usando > ou <, pois eles são usados para redirecionamentos. 3) Agora apaga! ou quase. veja como eu fiz pra apagar os arquivos... sem apagar nada. É só usar um foreach, que vai executar o comando rm para cada ítem que chegar pelo pipe. eu usei o parâmetro -WhatIf, que, ao invés de apagar, mostra o que seria acontecido... só para fins de teste antes de botar meu super script de uma linha em ação. PS: Coloquei com uma fonte menor pra ficar mais fácil pra ler =)... sem quebras de linha. alonenomad@monad Meus Documentos\> ls | where {$_.lastwritetime -lt (date).adddays(-5)} | foreach {rm $_ -whatif} Confirm The item at D:\Vinicius\Meus Documentos\Apresentações has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): a What if: Performing operation "Remove Directory" on Target "D:\Vinicius\Meus Documentos\Apresentações". Confirm The item at D:\Vinicius\Meus Documentos\BVRP Software has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): a What if: Performing operation "Remove Directory" on Target "D:\Vinicius\Meus Documentos\BVRP Software". Confirm The item at D:\Vinicius\Meus Documentos\CS sounds has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): a What if: Performing operation "Remove Directory" on Target "D:\Vinicius\Meus Documentos\CS sounds". Confirm The item at D:\Vinicius\Meus Documentos\EESC - Biblioteca has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): a What if: Performing operation "Remove Directory" on Target "D:\Vinicius\Meus Documentos\EESC - Biblioteca". Confirm The item at D:\Vinicius\Meus Documentos\Faculdade has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): a What if: Performing operation "Remove Directory" on Target "D:\Vinicius\Meus Documentos\Faculdade". . . . What if: Performing operation "Remove Directory" on Target "D:\Vinicius\Meus Documentos\WindowsPowershell". What if: Performing operation "Remove File" on Target "D:\Vinicius\Meus Documentos\alonenomad.png". What if: Performing operation "Remove File" on Target "D:\Vinicius\Meus Documentos\AssinaturaEmail.txt". What if: Performing operation "Remove File" on Target "D:\Vinicius\Meus Documentos\AssinaturaNG.txt". What if: Performing operation "Remove File" on Target "D:\Vinicius\Meus Documentos\Calendário de Provas 2sem 2005.doc". What if: Performing operation "Remove File" on Target "D:\Vinicius\Meus Documentos\Carta.doc". What if: Performing operation "Remove File" on Target "D:\Vinicius\Meus Documentos\Controle Financeiro.xls". What if: Performing operation "Remove File" on Target "D:\Vinicius\Meus Documentos\Dados dos Petianos.doc". . . . alonenomad@monad Meus Documentos\> Pronto. Espero que gostem! Vinicius

Categorias dessa postagem:

Comentários

Anônimo : Bom dia,
Mesmo que seja atrasado " Ô Cabra bom", fazia tempo que eu queria executar algo parecido como esse que vc mostrou aqui.

Parabens, queria ter um filho assim. [16/4/10 10:41 - link]