উইন্ডোজ পাওয়ারশেলে আমি কীভাবে দুটি ফোল্ডারকে আলাদা করতে পারি?


11

আমি উইন্ডোজ পাওয়ারশেল ব্যবহার করে দুটি ফোল্ডার কাঠামোর সামগ্রীতে পার্থক্য সন্ধান করার চেষ্টা করছি। ফাইলের নাম একই কিনা তা নিশ্চিত করার জন্য আমি নিম্নলিখিত পদ্ধতিটি ব্যবহার করেছি, তবে এই পদ্ধতিটি ফাইলগুলির বিষয়বস্তু সমান কিনা তা আমাকে জানায় না:

$firstFolder = Get-ChildItem -Recurse folder1
$secondFolder = Get-ChildItem -Recurse folder2
Compare-Object -ReferenceObject $firstFolder -DifferenceObject $secondFolder

এই সার্ভারফল্ট প্রশ্নের বর্ণিত কৌশলটি একটি একক ফাইলকে পৃথক করার জন্য কাজ করে তবে এই ফোল্ডারগুলিতে বিভিন্ন গভীরতায় শত শত ফাইল রয়েছে।

সমাধানগুলিতে অগত্যা ফাইলগুলিতে বিশেষত কী আলাদা তা আমাকে বলার প্রয়োজন নেই - কেবল সেগুলি। আমি মেটাডেটার যেমন তারিখের মতভেদগুলিতে আগ্রহী নই, যা আমি ইতিমধ্যে আলাদা হতে জানি।

উত্তর:


15

আপনি যদি তুলনাটি একটি লুপে মুড়ে রাখতে চান তবে আমি নীচের পদ্ধতিটি গ্রহণ করব:

$folder1 = "C:\Users\jscott"
$folder2 = "C:\Users\public"

# Get all files under $folder1, filter out directories
$firstFolder = Get-ChildItem -Recurse $folder1 | Where-Object { -not $_.PsIsContainer }

$firstFolder | ForEach-Object {

    # Check if the file, from $folder1, exists with the same path under $folder2
    If ( Test-Path ( $_.FullName.Replace($folder1, $folder2) ) ) {

        # Compare the contents of the two files...
        If ( Compare-Object (Get-Content $_.FullName) (Get-Content $_.FullName.Replace($folder1, $folder2) ) ) {

            # List the paths of the files containing diffs
            $_.FullName
            $_.FullName.Replace($folder1, $folder2)

        }
    }   
}

নোট যে এই ফাইল যার কোন অস্তিত্ব নেই উপেক্ষা করা হবে উভয় $folder1 এবং $folder2


5

আমি jscott এর উত্তরটি এর প্রসারিত ফাইলগুলিতে একের মধ্যে উপস্থিত ফাইলগুলিকে আউটপুট করতে প্রসারিত করেছিলাম তবে এই ধরণের কার্যকারিতার জন্য যারা আগ্রহী তাদের জন্য অন্যটি নয়। দয়া করে মনে রাখবেন এটি অগ্রগতিও দেখায় যেহেতু আমার পক্ষে এটি দেখা শক্ত ছিল যে বিশাল ফোল্ডারগুলিকে খুব বেশি পার্থক্য না করে দেওয়া হয়েছে। দেখে মনে হচ্ছে স্ক্রিপ্টটি আমার কাছে ঝুলানো ছিল। এখানে তার জন্য পাওয়ারশেল কোডটি রয়েছে:

$folder1 = "C:\Folder1"
$folder2 = "C:\Folder2"

# Get all files under $folder1, filter out directories
$firstFolder = Get-ChildItem -Recurse $folder1 | Where-Object { -not $_.PsIsContainer }

$failedCount = 0
$i = 0
$totalCount = $firstFolder.Count
$firstFolder | ForEach-Object {
    $i = $i + 1
    Write-Progress -Activity "Searching Files" -status "Searching File  $i of     $totalCount" -percentComplete ($i / $firstFolder.Count * 100)
    # Check if the file, from $folder1, exists with the same path under $folder2
    If ( Test-Path ( $_.FullName.Replace($folder1, $folder2) ) ) {
        # Compare the contents of the two files...
        If ( Compare-Object (Get-Content $_.FullName) (Get-Content $_.FullName.Replace($folder1, $folder2) ) ) {
            # List the paths of the files containing diffs
            $fileSuffix = $_.FullName.TrimStart($folder1)
            $failedCount = $failedCount + 1
            Write-Host "$fileSuffix is on each server, but does not match"
        }
    }
    else
    {
        $fileSuffix = $_.FullName.TrimStart($folder1)
        $failedCount = $failedCount + 1
        Write-Host "$fileSuffix is only in folder 1"
    }
}

$secondFolder = Get-ChildItem -Recurse $folder2 | Where-Object { -not $_.PsIsContainer }

$i = 0
$totalCount = $secondFolder.Count
$secondFolder | ForEach-Object {
    $i = $i + 1
    Write-Progress -Activity "Searching for files only on second folder" -status "Searching File  $i of $totalCount" -percentComplete ($i / $secondFolder.Count * 100)
    # Check if the file, from $folder2, exists with the same path under $folder1
    If (!(Test-Path($_.FullName.Replace($folder2, $folder1))))
    {
        $fileSuffix = $_.FullName.TrimStart($folder2)
        $failedCount = $failedCount + 1
        Write-Host "$fileSuffix is only in folder 2"
    }
}

তুলনা-অবজেক্ট কল করার সময় আপনি কেন কোনও ফাইলের আসল বিষয়বস্তুগুলি বের করতে পারবেন? তুলনা-অবজেক্টটি যা করে তা স্থির করে। টেকনেট.মাইক্রোসফট.ইন- ইউস
ক্যাস্পার লিওন

1

আপনি ইতিমধ্যে এটির উত্তর দিয়ে থাকা আপনার লিঙ্কযুক্ত প্রশ্ন থেকে সঠিক উত্তরের জন্য একটি লুপ গুটিয়ে রেখেছেন এবং প্রতিটি ফাইলকে একই নামের সাথে তুলনা করে ডিরেক্টরি ট্রিটিতে হাঁটাবেন।

/ সম্পাদনা: এটি যদি সত্যিই আপনার প্রশ্ন হয় তবে এটি এসও এর পক্ষে আরও উপযুক্ত, যেখানে আপনি মনে করছেন নিয়মিত সহযোগী হিসাবে। আপনি একটি প্রোগ্রামিং প্রশ্ন জিজ্ঞাসা করছেন। আমি বুঝতে পেরেছি আপনি সিসাদমিন-ধরণের উদ্দেশ্যে এটি করছেন, সেই ক্ষেত্রে আমি আপনাকে উইনডিফের মতো একটি উদ্দেশ্য-নির্মিত সরঞ্জাম ব্যবহার করতে বলব।


2
ঠিক আছে, "আমাকে কোডজ দিন" টাইপ প্রশ্নের জন্য এই সাইটটি উপযুক্ত নয়। আপনার যদি পাওয়ারশেলের লুপগুলি কীভাবে করতে হয় তা শিখতে শুরু করতে হবে, একটি বই কিনুন বা অনলাইন টিউটোরিয়াল সন্ধান করুন; এখানে অনেক.
এমফিনি

2
আমি মনে করি আপনি বিছানার ভুল দিকে জেগেছি। আমি কোনও নিয়মিত পাওয়ারশেল ব্যবহারকারী নই। আমি আমার প্রশ্নে উভয়ই একটি কৌশল যেটি আমি বর্তমানে চেষ্টা করছি এবং এবং এমন একটি প্রশ্নের লিঙ্ক, যা আমার সমস্যার জন্য অতিরিক্ত সহায়ক তথ্য রয়েছে both আমি জানি না কীভাবে দুটি কৌশল একত্রিত করতে হবে যা আমার সমস্যা এবং আমি এই প্রশ্নটি করার কারণটি বলেছি। এটি এমন একটি প্রশ্ন যা আমি গুগল অনুসন্ধানগুলি ব্যবহার করে উত্তর দিতে অক্ষম। আপনি যদি সহায়ক হতে না চান তবে দয়া করে আপনার উত্তর মোছার বিষয়টি বিবেচনা করুন।
ডেভিড স্মিথ

2
@BigDave আক্ষরিক প্রথম ফলাফলের জন্য PowerShell loop through filesGoogle এ । এখন কি - আপনার পক্ষ থেকে একটু চেষ্টা?
voretaq7

2
@ ভোরেটাক I আমি মনে করি আপনি ছেলেরা আমাকে পাওয়ারশেল ব্যবহারকারী হিসাবে ভুল বুঝবেন। আমি সেই গুগল অনুসন্ধান করেছি, সেই কৌশলটি চেষ্টা করেছি এবং সফল হই নি। উপরের প্রশ্নে আমি কোথায় আছি তা বোঝানোর চেষ্টা করেছি। আপনি যে প্রশ্নটির সাথে লিঙ্ক করেন সেটি ফাইলের একক সেটে কাজ করে। নাম-থেকে-নাম তুলনা করতে আমার দুটি সেট রয়েছে। আমি এখানে সত্যিই অলস হওয়ার চেষ্টা করছি না। আমি জানি কিভাবে লুপ করতে হয়, এবং আমি কীভাবে তুলনা করতে জানি। আমি কীভাবে লুপ করব এবং দুটি সেট তুলনা করব?
ডেভিড স্মিথ

1
আমি মনে করি PS এর সাথে এটি করা একটি দুর্দান্ত ছোট প্রকল্প। যাইহোক, উইনমার্জ (ভেবেছিলেন এটি উইনডিফ, বোকা আমার) সত্যিই একটি দুর্দান্ত সরঞ্জাম যদি আপনি খুব ঘন ঘন এটি করতে যাচ্ছেন। এটি আক্ষরিক কাজের জন্য নির্মিত। এটি ব্যবহার করে দেখুন, ডাউনলোডটি বিনামূল্যে। এটি বেশিরভাগ ফাইলের ধরণের জন্য ডিকম্পোজার পেয়েছে এবং আপনি কীভাবে সাদা স্থান পরিচালনা করতে চান তার বিকল্পগুলি সহ হাইলাইট করার দুর্দান্ত কাজ করে।
mfinni

0

এটা কর:

compare (Get-ChildItem D:\MyFolder\NewFolder) (Get-ChildItem \\RemoteServer\MyFolder\NewFolder)

এমনকি পুনরাবৃত্তির সাথে:

compare (Get-ChildItem -r D:\MyFolder\NewFolder) (Get-ChildItem -r \\RemoteServer\MyFolder\NewFolder)

এবং ভুলে যাওয়া এমনকি কঠিন :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.