Итак, у меня есть два отдельных сервера, и мне нужно синхронизировать каталоги с одинаковыми именами, НО находятся в другой структуре каталогов.
Например, один сервер это \\calafs01\GFX_Drop\x\*
xлюбой каталог в GFX_Drop, и я хочу скопировать все его подпапки и их содержимое (только модификации и только новые файлы)
другой сервер \\calamedia\edit\y\x\*
у является организационнымкатегория, которую используют наши пользователи.
Мне нужно скопировать все, что попадает в x на calafs01, в calamedia, однако из-за этого это очень усложняет.
Я могу достаточно легко создать массив свсе значения x:
$Projects = Get-ChildItem \\calafs01\GFX_Drop | %{$_.name}
, но проблема заключается в том, что сценарий находит каталог x в любом каталоге y, в котором он находится на calamedia, для копирования.
Предполагая использовать робокопию, как только я смогу выяснить, как это сделать ...
Заранее спасибо
РЕДАКТИРОВАТЬ за ответ NAS:
Так что я туп и понял, что есть еще один каталог ПОСЛЕ x в calamedia, но он ВСЕГДА называется GFX, поэтому путь назначения на самом деле \\calamedia\edit\y\x\GFX\*
Предполагается, что это будет простое добавление ...поэтому взял ваш сценарий и сделал это:
$get_y = Get-ChildItem -Directory -Path \\calamedia\edit | Get-ChildItem -Directory # get all dirs one level deeper
Get-ChildItem -Directory -Path \\calafs01\GFX_Drop\ | ForEach-Object { # get all folders 'x'
$dest_y = $get_y | Where-Object -Property Name -eq $_.Name # match folder names
if ($dest_y) {
Copy-Item -Path $_.FullName -Recurse -Destination "$dest_y.Parent.FullName/GFX" -Force -WhatIf
# or robocopy if you need to copy modified/new files only
}
}
По сути, просто добавил /GFX
в конец $dest_y.Parent.FullName
(с кавычками), полагал, что это будет работать, но теперь он срабатывает в пункте назначения,Есть ли у меня синтаксическая ошибка при расширении каталога?
РЕДАКТИРОВАТЬ 2:
Понял.
PS C:\Users\chris.slagel> $get_y = Get-ChildItem -Directory -Path \\calamedia\edit | Get-ChildItem -Directory # get all dirs one level deeper
Get-ChildItem -Directory -Path \\calafs01\GFX_Drop\ | ForEach-Object { # get all folders 'x'
$dest_y = $get_y | Where-Object -Property Name -eq $_.Name # match folder names
if ($dest_y) {
Copy-Item -Path $_.FullName -Recurse -Destination "$($dest_y.Parent.FullName)\GFX" -Force -WhatIf
# or robocopy if you need to copy modified/new files only
}
}
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test Destination: \\calamedia\edit\Theatrical\GFX".
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test - Copy Destination: \\calamedia\edit\Gaming\GFX".
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test - Copy (2) Destination: \\calamedia\edit\Home Entertainment\GFX".
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test - Copy (3) Destination: \\calamedia\edit\Home Entertainment\GFX".
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test - Copy (4) Destination: \\calamedia\edit\TV & Streaming\GFX".
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test - Copy (5) Destination: \\calamedia\edit\VR\GFX".
Похоже, что он правильно находит папки категорий, но в нем отсутствует часть x (имена проектов, в данном случае все папки "Это тест")
Напримерпервый пункт назначения должен быть \\calamedia\edit\Theatrical\This Is A Test\GFX