Копирование недавно измененных файлов со структурой папок с помощью PowerShell - PullRequest
1 голос
/ 17 апреля 2019

Я новичок в PowerShell.Может кто-нибудь, пожалуйста, помогите мне с моим требованием, как показано ниже.У меня есть папка, подпапки и подпапки, ... и файлы внутри каждого уровня папок.Если какой-либо файл изменяется / создается, мне нужно скопировать этот измененный / созданный файл с соответствующей структурой папок.

Например -> У меня есть структура папок, как показано ниже.

src
  |->classes->ClassFile1(file)
  |->objects->ObjectFile1(file)
  |->Aura->Component->ComponentFile1(file),ComponentFile2(file)

Теперь, если ComponentFile1 изменился, мне нужно скопировать структуру папок, относящуюся только к этому файлу, в мою целевую папку.Как src / aura / Component / ComponentFile1.

Я пробовал что-то подобное, что не работает.

$Targetfolder= "C:\Users\Vamsy\desktop\Continuous Integration\Target"

$Sourcefolder= "C:\Users\Vamsy\desktop\Continuous Integration\Source"

$files = get-childitem $Sourcefolder -file | 
          where-object { $_.LastWriteTime -gt [datetime]::Now.AddMinutes(-5) }|
          Copy-Item -Path $files -Destination $Targetfolder -recurse -Force

Любая помощь по этому вопросу приветствуется.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Пожалуйста, попробуйте код ниже.

$srcDir = "C:\Users\Vamsy\desktop\Continuous Integration\Target"
$destDir = "C:\Users\Vamsy\desktop\Continuous Integration\Source"

Get-ChildItem $srcDir -File -Recurse |
Where-Object LastWriteTime -gt (Get-Date).AddMinutes(-5) |
ForEach-Object {
    $destFile = [IO.FileInfo]$_.FullName.Replace($srcDir, $destDir)
    if($_.LastWriteTime -eq $destFile.LastWriteTime) { return }
    $destFile.Directory.Create()
    Copy-Item -LiteralPath $_.FullName -Destination $destFile.FullName -PassThru
}
0 голосов
/ 17 апреля 2019

То, что вы хотите, легко достигается с помощью robocopy вместо copy-item .У него есть опции для sysncing папок, очистки удаленных папок и многих других.Использование выглядит примерно так:

$source = 'C:\source-fld'
$destination = 'C:\dest-fld'
$robocopyOptions = @('/NJH', '/NJS') #just add the options you need
$fileList = 'test.txt' #optional you can provide only some files or folders or exclude some folders (good for building a project when you want only the sourcecode updated)

Start robocopy -args "$source $destination $fileList $robocopyOptions"

Некоторые полезные опции:

/ s - включать непустые подкаталоги / e для включениявсе подкаталоги (иногда необходимо, поскольку содержимое будет помещено туда во время сборки или тестирования) / b - режим резервного копирования - копировать только новые файлы / purge - удалять то, что было удалено в исходной папке

По всем параметрам см. документы для robocopy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...