รับขนาดไดเร็กทอรีผ่าน SFTP


2

ลูกค้ามี websever ที่มีการจัดการ บนเซิร์ฟเวอร์นี้เป็นสคริปต์อีคอมเมิร์ซและบางส่วนของสคริปต์ทิ้งข้อมูลสำรองทุกสัปดาห์ การสำรองข้อมูลจะถูกเก็บไว้บนเว็บเซิร์ฟเวอร์ (ไม่ได้อยู่ในเส้นทาง HTTP) ISP ใช้เวลาทำสำเนาและลูกค้าของฉันก็ต้องการทำสำเนาด้วย

สิ่งที่ฉันพยายามทำคือก่อนที่จะดาวน์โหลดไฟล์ฉันต้องการคำนวณขนาดไดเรกทอรีสำรอง - แต่การเข้าถึงเพียงอย่างเดียวที่ฉันมีคือผ่าน SFTP เป็นไปได้หรือไม่ที่จะได้ขนาดไดเรกทอรีจากนั้นใช้สิ่งนี้ใน PowerShell Script

หมายเหตุ: ฉันได้เขียนสคริปต์ดาวน์โหลดอัตโนมัติใน PowerShell และฉันต้องการที่จะขยาย

ยกโทษให้ฉันถ้านี่ฟังดูคลุมเครือฉันสามารถให้ข้อมูลเพิ่มเติมหากคุณมีคำถามเฉพาะเจาะจง


ในการชี้แจงคุณหมายถึง SFTP ซึ่งคุณจะเข้าถึงผ่าน WinSCP หรือไคลเอนต์ที่คล้ายกันไม่ใช่ FTPS ซึ่งคุณจะเข้าถึงผ่านเว็บเบราว์เซอร์ / wget / curl หรือตัวจัดการการดาวน์โหลดเว็บเช่น FileZilla ใช่ไหม
Frank Thomas

@FrankThomas ใช่ฉันจะใช้ SFTP ผ่าน PuTTY โดยการแยกอาร์กิวเมนต์บรรทัดคำสั่งไปยัง. exe จาก PowerShell
developer__c

คุณอาจจะดีกว่าเมื่อใช้รุ่นบรรทัดคำสั่งของ WinSCP เนื่องจากมี API สำหรับงานเช่นขนาดวัตถุ บทความนี้เป็นวันที่ แต่ควรให้คำแนะนำที่ดีกับคุณ: codeproject.com/Articles/545586/…
Frank Thomas

คำตอบ:


1

เป็นเรื่องง่ายด้วยชุดประกอบ WinSCP .NETและSession.EnumerateRemoteFilesวิธีการ :

# 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)"

(ฉันเป็นผู้เขียน WinSCP)


0

ฉันได้เพิ่มการทำงานและใช้ PHP ฉันขอขนาดไดเรกทอรีบนเซิร์ฟเวอร์ - จากนั้นฉันสามารถคว้าข้อมูลโดยใช้สคริปต์ PowerShell

PHP Script ที่จะคว้าขนาดไฟล์

<?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 เพื่อคว้าขนาดไฟล์จากสคริปต์ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.