Obtém o tamanho do diretório por meio do SFTP

2

Um cliente tem um websever gerenciado; neste servidor é um script de comércio eletrônico e parte do script despeja um backup toda semana. O backup é armazenado no servidor da web (não na rota HTTP). O ISP faz uma cópia e meus clientes também querem fazer uma cópia.

O que eu estou tentando fazer é antes de baixar o arquivo que eu quero ser capaz de calcular o tamanho do diretório de backup - mas o único acesso que eu tenho é através de SFTP. É possível obter facilmente o tamanho do diretório e usá-lo em um Script do PowerShell.

NOTA: Eu escrevi um script de download automático no PowerShell e quero estender isso.

Perdoe-me se isso parecer vago. Eu posso fornecer mais informações se você tiver alguma pergunta específica.

    
por developer__c 03.06.2014 / 20:09

2 respostas

1

É fácil com o assembly WinSCP .NET e seu Session.EnumerateRemoteFiles method :

# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"

# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Sftp
    HostName = "host"
    UserName = "user"
    Password = "password"
    SshHostKeyFingerprint = "fingerprint"
}

Write-Host "Connecting..."
$session = New-Object WinSCP.Session
$session.Open($sessionOptions)

Write-Host "Calculating..."
$sum =
    $session.EnumerateRemoteFiles(
        "/remote/path", $Null, [WinSCP.EnumerationOptions]::AllDirectories) |
    Measure-Object -Property Length -Sum
Write-Host "Size is $($sum.Sum)"

(eu sou o autor do WinSCP)

    
por 09.10.2017 / 09:43
0

Eu adicionei um trabalho, e usando PHP eu peço o tamanho do diretório no servidor - então eu posso pegar as informações usando um script powershell.

Script PHP para capturar o tamanho do arquivo

<?php
$f = 'PATH FROM LINUX ROOT TO DIRECTORY YOU WANT SIZE OF';
    $io = popen ( '/usr/bin/du -sk ' . $f, 'r' );
    $size = fgets ( $io, 4096);
    $size = substr ( $size, 0, strpos ( $size, "\t" ) );
    pclose ( $io );
    echo 'Backup Size: ' . $f . ' => Size: <h3>' . $size . '</h3>';

?>

Powershell para pegar o tamanho do arquivo do script PHP:

$url = 'PATH TO PHP FILE SIZE SCRIPT'
$pattern =  '(?i)<h3[^>]*>(.*)</h3>'

$webclient = New-Object System.Net.WebClient
$html = $webclient.DownloadString($url)


$result = [Regex]::Matches($html, $pattern)

$result | ForEach-Object {
  [int]$remoteSize =  $_.Groups[1].Value
}

# Correct the disc size (-332)

$remoteSize -=332
    
por 04.06.2014 / 11:02