Diretório de espelhamento, apenas limpando os arquivos no diretório de destino com mais de 7 dias

2

Gostaria de espelhar um diretório, mas excluir apenas arquivos no diretório de destino com mais de 7 dias.

Situação:

- Directory A is mirrored to Directory B.
- A file from Directory A is deleted

Eu gostaria que esse arquivo permanecesse no diretório B por sete dias. Após 7 dias, o arquivo será excluído se ainda não existir no Diretório A.

Solução atual:

- Use Free File Sync to mirror Directory A to Directory B. Extra files in Directory B are moved (termed versioning within Free File Sync) to a temp directory
- Use a powershell script to update date modified to current date for all files in the temp directory
- Move contents of temp directory to a delete pending directory using robocopy
- Use Delage32 program to delete files and empty directories older (date modified) than 7 days in the delete pending directory.

Existem dois problemas. Uma é a quantidade de etapas necessárias para esse tipo de backup. Mais importante, eu tenho que usar dois diretórios temporários com gravações em disco excessivas para conseguir essencialmente o que eu estou procurando.

Eu poderia usar a opção robocopy / mir e delage32 se o robocopy atualizasse os timestamps no diretório de destino, mesmo que não ocorressem cópias ... como um comando unix touch incorporado ao robocopy. Alguma sugestão ou alternativas?

    
por user1905482 22.12.2012 / 09:23

1 resposta

4

Aqui está um script simples do PowerShell que fará o que você está procurando. Altere FolderA e FolderB apropriadamente. Além disso, o -whatif apenas informará o que ele fará sem executar nenhuma ação. Depois que você verificar que está tentando corrigir, basta remover o -whatif .

#This sets $FolderA to the directory you want to copy from    
$FolderA = "v:\FolderA"
#This sets $FolderB to the directory you want to copy to
$FolderB = "v:\FolderB" 
#This does the copy (Note the -whatif to make sure this is what you want)
Copy-Item -Path "$FolderA\*" -Destination $FolderB -WhatIf
#This does a compare of Directory A and B, and removes all files that only exist in Directory B that haven't been access for 7 days. (Again, notices the -whatif at the end)
Compare-Object (Get-ChildItem $FolderA) (Get-ChildItem $FolderB) ' #The ['] tells PowerShell the command will continue on the next line
    | where {$_.SideIndicator -eq "=>"} '
    | where {$_.InputObject.LastWriteTime -le (Get-Date).Adddays(-7)} '
    | Foreach { Remove-Item -Path $_.InputObject.FullName -WhatIf}
    
por 09.01.2013 / 01:06