Ecco lo scenario: abbiamo un server Web di produzione con alcune migliaia di file e cartelle a cui è associato un "_DATE". Vogliamo spostarli in una cartella temporanea (assicurati che non siano in uso) e in un secondo momento eliminare i file.PowerShell: copia/sposta i file in base a un valore di espressione regolare, mantenendo la struttura delle cartelle, ecc.
posso usare:
Get-ChildItem -Path W:\IIS -Recurse | Where-Object{$_.Name -match "_\d{8,10}$"}
per ottenere un elenco di tutti i file/cartelle e le loro posizioni. Ma eliminarli tutti manualmente sembra molto lavoro, soprattutto se ciò è necessario in futuro. Ho trovato alcuni esempi che quasi fare quello che voglio:
cls
$source = "W:\IIS"
$destination = "C:\Temp\DevTest"
foreach ($i in Get-ChildItem -Path $source -Recurse)
{
if ($i.Name -match "_\d{8,10}$")
{
Copy-Item -Path $i.FullName -Destination $item.FullName.ToString().Replace($source,$destination).Trim($item.Name)
}
}
E:
cls
$source = "W:\IIS"
$destination = "C:\Temp\DevTest"
$bin = Get-ChildItem -Path $source -Recurse | Where-Object{$_.Name -match "_\d{8,10}$"}
foreach ($item in $bin) {
Copy-Item -Path $item.FullName -Container -Destination $item.FullName.ToString().Replace($source,$destination).Trim($item.Name) -Recurse
}
Il problema con questi due sono che quando li provo con un copia-voce io alla fine con un directory piatta, e ho bisogno di preservare la struttura della directory in modo che se la mossa va male posso ripristinare (preferibilmente trascinare e rilasciare tutte le cartelle nella cartella IIS) o ottengo una copia di molte cartelle/file extra che non appaiono quando eseguo il primo comando.
Modifica il mio primo comando:
Get-ChildItem -Path W:\IIS -Recurse | Where-Object{$_.Name -match "_\d{8,10}$"} | Copy-Item -Container -Destination C:\Temp\DevTest -Recurse
copierà tutto quello che ho bisogno, ma con un albero di directory piatta, piuttosto che mantenendo la struttura ad albero (ma sostituendo la directory di origine con la destinazione).
Eventuali commenti/suggerimenti?
Ah, non avevo visto [risposta di manojlds ] (http://stackoverflow.com/questions/7893919/powershell-copy-move-files-based-on-a-regex-value-retaining-the-folder -structu/7895211 # 7895211) ancora:] – mousio