Назад | Перейти на главную страницу

Зеркальный каталог, очистка только файлов в целевом каталоге старше 7 дней

Я хотел бы отразить каталог, но удалить только файлы в каталоге назначения старше 7 дней.

Ситуация:

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

Я хочу, чтобы этот файл оставался в Каталоге B в течение 7 дней. По истечении 7 дней файл будет удален, если он все еще не существует в каталоге A.

Текущее решение:

- 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.

Есть две проблемы. Один из них - количество шагов, необходимых для этого типа резервного копирования. Что еще более важно, я должен использовать два временных каталога с чрезмерным количеством операций записи на диск, чтобы добиться того, чего я хочу.

Я мог бы обойтись без использования опции robocopy / mir и delage32, если бы robocopy обновил бы временные метки в целевом каталоге, даже если не было никаких копий ... как команда касания unix, встроенная в robocopy. Есть предложения или альтернативы?

Вот простой сценарий PowerShell, который сделает то, что вы ищете. + Изменить FolderA и FolderB соответственно. Так же -whatif просто скажет вам, что он будет делать, не выполняя никаких действий. Убедившись, что то, что вы пытаетесь сделать, правильно, просто удалите -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}