2 votes

Répertoire miroir, purgeant uniquement les fichiers du répertoire de destination datant de plus de 7 jours

J'aimerais créer un miroir d'un répertoire, mais ne supprimer que les fichiers du répertoire de destination datant de plus de 7 jours.

Situation :

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

Je voudrais que ce fichier reste dans le répertoire B pendant 7 jours. Après 7 jours, le fichier serait supprimé s'il n'existe toujours pas dans le répertoire A.

Solution actuelle :

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

Il y a deux problèmes. Le premier est la quantité d'étapes requises pour ce type de sauvegarde. Plus important encore, je dois utiliser deux répertoires temporaires avec des écritures disque excessives pour obtenir essentiellement ce que je recherche.

Je pourrais m'en sortir en utilisant l'option robocopy /mir et delage32 si robocopy mettait à jour les horodatages dans le répertoire de destination, même si aucune copie n'a eu lieu comme une commande touch unix incorporée dans robocopy. Des suggestions ou des alternatives ?

4voto

Nick Points 256

Voici un simple script PowerShell qui fera ce que vous recherchez. Changez FolderA y FolderB de manière appropriée. En outre, le -whatif vous dira simplement ce qu'il fera sans effectuer aucune action. Une fois que vous avez vérifié que ce que vous essayez de faire est correct, il vous suffit de retirer l'option -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}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X