Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проверка существования файла перед копированием на AWS S3 / 7 сообщений из 7, страница 1 из 1
03.09.2020, 10:45
    #39995152
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования файла перед копированием на AWS S3
Добрый день,

Пытаюсь создать скрипт по копированию бекапов баз на S3. Структура папок примерно такая:
ServerName
- FullBackups
-- Daily
-- Weekly
-- Monthly

Внутри под-папок сами файлы бекапов. Структура может меняться, поэтому нужно чтобы код просматривал все дерево. Ниже то, что у меня получилось.

Одна проблема: если файл уже загружен на S3, то он копируется повторно. Копирование осуществляется по папкам нижнего уровня.
Как изменить скрипт ниже, чтобы можно было проверить существования файла перед копированием? Что-то типа:


Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
$fFile = "daily_master_20200831.bak"
$S3file = Get-S3Object -BucketName $S3Bucket -Key "/ServerName/FullBackups/Daily/daily_master_20200831.bak"
$s3obj = ($S3file.key -split "/")[-1]
if ($fFile -eq $s3obj -and $S3file.size -ge $fFile.Length) {
    "File exists: $s3obj"
}
else{
    Write-S3Object -BucketName $S3Bucket -Key $s3keyname -File $backupName 
}




Основной скрипт тут:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
$BackupLocation = 'F:\FullBackups'
$S3Bucket = 'MyBucket'
$s3Folder = 'MyServer'

Import-Module -Name AWSPowerShell
Initialize-AWSDefaults -ProfileName MyProfile -Region ap-southeast-2


# FUNCTION – Iterate through subfolders and upload files to S3
function RecurseFolders([string]$path) {
  $fc = New-Object -com Scripting.FileSystemObject
  $folder = $fc.GetFolder($path)
  foreach ($i in $folder.SubFolders) {
    $thisFolder = $i.Path

    # Transform the local directory path to notation compatible with S3 Buckets and Folders
    # 1. Trim off the drive letter and colon from the start of the Path
    $s3Path = $thisFolder.ToString()
    $s3Path = $s3Path.SubString(2)
    # 2. Replace back-slashes with forward-slashes
    # Escape the back-slash special character with a back-slash so that it reads it literally, like so: "\\"
    $s3Path = $s3Path -replace "\\", "/"
    $s3Path = "/" + $s3Folder + $s3Path

    # Upload directory to S3
    Write-S3Object -BucketName $s3Bucket -Folder $thisFolder -KeyPrefix $s3Path
  }

  # If subfolders exist in the current folder, then iterate through them too
  foreach ($i in $folder.subfolders) {
    RecurseFolders($i.path)
  }
}

# Upload root directory files to S3
$s3Path = "/" + $s3Folder + "/" + $sourceFolder
Write-S3Object -BucketName $s3Bucket -Folder $BackupLocation -KeyPrefix $s3Path
$s3Path
# Upload subdirectories to S3
RecurseFolders($BackupLocation)



Спасибо.
...
Рейтинг: 0 / 0
03.09.2020, 11:36
    #39995167
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования файла перед копированием на AWS S3
Roust_m,

Это что, PowerShell? Вы же не ходите за гайками в кондитерский магазин.
...
Рейтинг: 0 / 0
04.09.2020, 02:09
    #39995439
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования файла перед копированием на AWS S3
Владислав Колосов
Roust_m,

Это что, PowerShell? Вы же не ходите за гайками в кондитерский магазин.


Здесь отдельного форума нет по PowerShell, и PowerShell сейчас почти как TSQL, очень много скриптов для сиквела пишется на нем. Не вижу проблемы.
...
Рейтинг: 0 / 0
04.09.2020, 08:01
    #39995463
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования файла перед копированием на AWS S3
Код: sql
1.
if ((Test-Path -path  "полный путь к файлу") -ne $True)
...
Рейтинг: 0 / 0
04.09.2020, 08:46
    #39995468
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования файла перед копированием на AWS S3
HandKot
Код: sql
1.
if ((Test-Path -path  "полный путь к файлу") -ne $True)



Это я и сам знаю, вот только копирование идет по папкам, путь я знаю, а вот как изменить скрипт чтобы имя файла можно было проверить...
...
Рейтинг: 0 / 0
04.09.2020, 10:49
    #39995513
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования файла перед копированием на AWS S3
Roust_m,

то, что Вы хотите к сиквелу не имеет никакого отношения. Сделайте для перемещения файлов пакет Integration Services, например. Там для этого есть все средства.
...
Рейтинг: 0 / 0
11.09.2020, 04:21
    #39997510
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка существования файла перед копированием на AWS S3
Нашел решение, может кому пригодится:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
param($BackupFolder, $S3Bucket, $s3Folder, $Filter) 
$erroractionpreference = "Stop"
<#
$BackupFolder = 'F:\Backup'
$S3Bucket = 'mybucket'
$s3Folder = 's3myfolder'
$Filter = '*.zip'
#>

# Get the AWS Stuff
Import-Module -Name AWSPowerShell
# Get credentials from the persisted store
Initialize-AWSDefaults -ProfileName MyProfile -Region MyRegion


Get-ChildItem –Path $BackupFolder –Recurse -Filter $Filter |

Foreach-Object {
    #$S3filename = ""
    $filename = $_.FullName
    $S3filename = $filename.replace("^[a-z]:\\","")
    $S3filename = $s3Folder + '/' + $S3filename  
    $S3filename = $S3filename.replace("\","/")
    if(Get-S3Object -BucketName $S3Bucket | where{$_.Key -eq $S3filename}){
    "File $S3filename found"
    }
    else{
         Write-S3Object -BucketName $S3Bucket -Key $S3filename -File $filename
    }
}
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проверка существования файла перед копированием на AWS S3 / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]