powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проверка существования файла перед копированием на AWS S3
7 сообщений из 7, страница 1 из 1
Проверка существования файла перед копированием на AWS S3
    #39995152
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

Пытаюсь создать скрипт по копированию бекапов баз на 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
Проверка существования файла перед копированием на AWS S3
    #39995167
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,

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

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


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



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

то, что Вы хотите к сиквелу не имеет никакого отношения. Сделайте для перемещения файлов пакет Integration Services, например. Там для этого есть все средства.
...
Рейтинг: 0 / 0
Проверка существования файла перед копированием на AWS S3
    #39997510
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел решение, может кому пригодится:
Код: 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
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проверка существования файла перед копированием на AWS S3
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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