बैकअप से 1KB से छोटी फ़ाइलों को बदलें


0

मुझे एक साझा फ़ोल्डर पर दूषित फ़ाइलों को बदलने के लिए बैकअप का उपयोग करने की आवश्यकता है। सभी दूषित फ़ाइलें निश्चित आकार = 1KB हैं और संग्रह का ध्वज सेट है। मूल रूप से, मैं गंतव्य फ़ोल्डर में फ़ाइलों को बैकअप से फ़ाइलों के साथ बदलना चाहता हूं, यदि गंतव्य फ़ाइल & lt; = 1KB और / या संग्रह फ़्लैग सेट है।

रोबोकॉपी इसके लिए एक संभावित उपकरण की तरह दिखता है, लेकिन मैं इसे गंतव्य फ़ाइल पर कंडीशन करने का विकल्प नहीं देख सकता। एक अन्य उपकरण जो ऐसा दिखता है वह ऐसा कर सकता है Powershell, लेकिन मैं इससे अपरिचित हूं।

मैं इसे किसी भी कार्यक्रम के साथ कैसे पूरा कर सकता हूं?

जवाबों:


1

पॉवर्सशेल समाधान, दूषित फ़ाइलों की रिपोर्ट और पुनर्स्थापना कर सकता है:

# Use full paths!
$Backup = '\\server\backup'
$Corrupted = 'c:\broken_folder'

# Path for log file, can be relative
$LogFile = '.\Restore.log'

# If this variable is set to true, no files will be copied
$ReportOnly = $true

# Remove log file, if exist
if(Test-Path -Path $LogFile -PathType Leaf)
{
    Remove-Item -Path $LogFile -Force
}

# Get all files in directory, recursive
$Corrupted | Get-ChildItem -Recurse |
    # Select files with archive attribute: $_.Mode -like '*a*'
    # And size less or equal to 1KB: ($_.Length / 1KB) -le 1 . Less fancy way: $_.Length -le 1024
    # Ignore folders: -not $_.PsIsContainer
    #
    # In PS 3.0 and higher Get-ChildItem has less cryptic way to get folders and specify attributes:
    # http://www.powershellmagazine.com/2012/08/27/pstip-how-to-get-only-files-the-powershell-3-0-way
    Where-Object {($_.Mode -like '*a*') -and (($_.Length / 1KB) -le 1) -and (-not $_.PsIsContainer)} |
        ForEach-Object {
            # Output log record to pipeline, Tee-Object will catch it later
            "Found corrupted file: $($_.FullName)"

            # Replace current file path with path fo this file in backup folder
            $NewFile =  $_.FullName -replace [regex]::Escape($Corrupted), $Backup

            if(Test-Path -Path $NewFile -PathType Leaf)
            {
                # Output log record to pipeline, Tee-Object will catch it later
                "Found corresponding file from backup: $NewFile"
            }
            else
            {
                # Output log record to pipeline, Tee-Object will catch it later
                "Failed to find corresponding file from backup: $NewFile"
                return
            }

            if(-not $ReportOnly)
            {
                # Output log record to pipeline, Tee-Object will catch it later
                "Restoring file from backup: $NewFile -> $($_.FullName)"

                # Remove corrupted file
                Remove-Item -Path $_.FullName -Force

                # Copy file from backup
                Copy-Item -Path $NewFile -Destination $_.FullName -Force
            }
        } | Tee-Object -FilePath $LogFile -Append # Send log to screen and file

यह सब बढ़िया काम कर रहा है, क्या आप मुझे बता सकते हैं कि रिपोर्ट को फ़ाइल करने के लिए कैसे सहेजें, कृपया। मुझे पॉवरशेल सीखना शुरू करना होगा :)
Szafa

@Szafa ज़रूर, देखें अपडेटेड जवाब
beatcracker

@Szafa Btw, मेरी स्क्रिप्ट फ़ाइल को केवल तभी पुनर्स्थापित करेगी जब उसका आकार 1KB कम हो तथा आर्काइव फ्लैग सेट। आपके प्रश्न को फिर से पढ़ना, मुझे यकीन नहीं है कि यह वही है जो आपने पूछा है, बोली: फ़ाइल & lt; = 1KB है और / या संग्रह का ध्वज सेट है । क्या आप इस बात की पुष्टि कर सकते हैं कि आप उन फ़ाइलों को पुनर्स्थापित करना चाहते हैं जिनमें आर्काइव फ्लैग सेट है और कोई भी फाइल जो फ्लैक्स की परवाह किए बिना 1KB से कम है?
beatcracker

दूषित फ़ाइल & lt; = 1KB है और संग्रह का ध्वज सेट (दूषित स्टब फ़ाइल) है, लेकिन आपकी स्क्रिप्ट दूषित फ़ाइलों को बैकअप से प्रतिस्थापित नहीं कर रही है, और मैं यह नहीं देख सकता कि क्यों। यह दूषित फ़ाइलों को ढूंढ रहा है, लेकिन उनकी जगह नहीं ले रहा है। मुझे त्रुटि मिलती है: "दूषित फ़ाइल मिली: \\ server_name \ data $ \ BUSINESS \ प्रबंधन खाते \ 2012 \ _Month End \ 11_Nov \ 00_SAP महीना समाप्ति \ CO43 G & amp; A Calc इससे पहले कि कोई भी फ़ाइल Nov.12.XLS से संबंधित फ़ाइल ढूँढने में विफल रही; बैकअप: \\ server_name \ पुनर्स्थापित \ Shared \ Data \ BUSINESS \ Management खाते \ 2012 \ 01_Month End \ 11_Nov \ 00_SAP महीना समाप्ति \ CO43 G & amp; A Calc बिफोर ME Nov'12.XLS "
Szafa

क्या आप मदद कर सकते हैं, कृपया
Szafa

1

रोबोकॉपी में आपके लिए आवश्यक पैरामीटर हैं। उदाहरण के लिए:

/ A :: पुरालेख विशेषता सेट के साथ केवल फ़ाइलों की प्रतिलिपि बनाएँ।

/ M :: केवल पुरालेख विशेषता वाली फ़ाइलों को कॉपी करें और इसे रीसेट करें।


/ MAX: n :: MAXimum फ़ाइल आकार - n बाइट्स से बड़ी फ़ाइलों को बाहर करें।

/ मिनट: n :: न्यूनतम फ़ाइल आकार - n बाइट्स की तुलना में छोटी फ़ाइलों को बाहर करें।

यहां सभी आदेशों की एक सूची दी गई है: https://wmoore.wordpress.com/2009/09/01/robocopy-command-line-switches/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.