PowerShell에서 폴더 비교하는 방법

PowerShell에서 폴더 비교하는 방법

이 튜토리얼은 PowerShell을 사용하여 두 폴더를 비교하는 방법을 보여줍니다.

PowerShell 폴더 비교

PowerShell에서 두 폴더를 비교하는 것은 쉽고 단계별 프로세스입니다. 주어진 폴더의 내용을 비교하기 위해 PowerShell의 Compare-Object 메서드를 사용할 수 있습니다.

주어진 두 폴더에 대한 단계별 프로세스를 확인하세요:

폴더 1

폴더 2

폴더 내용 가져오기

첫 번째 단계는 주어진 폴더의 내용을 가져오는 것입니다. 먼저, 다음 명령을 실행하여 폴더의 자녀를 가져옵니다:

$SourceFolder = Get-ChildItem -Path C:\Users\Sheeraz\DemoFolder1
$DestinationFolder = Get-ChildItem -Path C:\Users\Sheeraz\DemoFolder2

위의 명령은 폴더의 내용을 가져옵니다. 내용을 표시하려면 선언된 변수를 호출합니다:

$SourceFolder

소스 폴더 콘텐츠의 출력은 다음과 같습니다:

    Directory: C:\Users\Sheeraz\DemoFolder1


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          9/9/2022  12:38 PM            399 Delftstack.java
-a----         8/30/2022   2:45 PM             51 delftstack.rtf
-a----         11/1/2022  12:55 PM         127286 demo.bmp
-a----         7/27/2022   4:15 PM            318 Example1.java
$DestinationFolder

대상 폴더 콘텐츠의 출력은 다음과 같습니다:

    Directory: C:\Users\Sheeraz\DemoFolder2


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         9/20/2022   5:16 PM             68 composer.json
-a----         9/20/2022   5:16 PM           4774 composer.lock
-a----         9/20/2022   4:11 PM        2801573 composer.phar
-a----         8/30/2022   2:45 PM             51 delftstack - Copy.rtf
-a----          9/9/2022  12:38 PM            399 Delftstack.java
-a----         8/30/2022   2:45 PM             51 delftstack.rtf
-a----         11/1/2022  12:55 PM         127286 demo - Copy.bmp
-a----         11/1/2022  12:55 PM         127286 demo.bmp
-a----         7/27/2022   4:15 PM            318 Example1.java

주어진 폴더의 파일 수와 크기 계산

이는 각 폴더에서 특정 확장자를 가진 파일의 수를 세고 각 폴더의 크기를 계산하는 선택적 단계입니다. 다음 명령을 실행하세요.

각 폴더에서 특정 확장자를 가진 파일의 수를 셉니다:

($DestinationFolder | where { $_.Extension -eq '.java' }).count

위의 명령은 대상 폴더에서 .java 확장자를 가진 파일의 수를 셉니다. 우리 폴더에서 얻는 출력은 2입니다.

소스 폴더에서도 마찬가지입니다:

($SourceFolder | where { $_.Extension -eq '.java' }).count

위의 명령은 소스 폴더에서 .java 확장자를 가진 파일 수를 셉니다. 우리 폴더에서 얻는 출력은 2입니다.

이제 주어진 폴더의 크기를 계산하려면 다음 명령을 실행합니다:

($DestinationFolder | Measure-Object -Property length -Sum).Sum
($SourceFolder | Measure-Object -Property length -Sum).Sum

위의 명령은 각 주어진 폴더의 크기를 계산합니다. 우리 폴더의 출력은 다음과 같습니다:

3061806
128054

이름으로 주어진 폴더 비교

먼저 파일 내부의 내용을 비교하지 않고 폴더의 콘텐츠 이름으로 폴더를 비교할 것입니다. 명령을 확인하세요:

Compare-Object -ReferenceObject $SourceFolder.Name -DifferenceObject $DestinationFolder.Name

위의 명령은 폴더 내용을 이름별로 비교하고 두 폴더에서 서로 다른 파일을 표시합니다. 출력을 확인하세요:

InputObject           SideIndicator
-----------           -------------
composer.json         =>
composer.lock         =>
composer.phar         =>
delftstack - Copy.rtf =>
demo - Copy.bmp       =>

이는 이 다섯 개의 파일이 이름으로 소스 폴더와 다름을 보여줍니다.

파일 내용으로 주어진 폴더 비교

마지막 단계에서 우리는 파일의 내용으로 폴더를 비교할 것입니다. 이 작업을 수행하려면 먼저 폴더의 파일을 hash로 변환해야 합니다.

hash 명령은 사용하기 쉽습니다. 예를 들어:

Get-FileHash 'Delftstack.java'

위의 명령은 파일 Delftstack.javahash를 가져옵니다. 출력을 확인하세요:

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          FACF7DD67442E2EF84460669E007DA40D17D82E4448D9DBC7E575D25D6012D30       C:\Users\Sheeraz\Delftstack.java

폴더의 각 파일에 대한 hash를 얻으려면 foreach 루프를 실행해야 합니다. 명령을 확인하세요:

$SourceFolder = Get-ChildItem -Path C:\Users\Sheeraz\DemoFolder1 | foreach { Get-FileHash -Path $_.FullName }
$DestinationFolder = Get-ChildItem -Path C:\Users\Sheeraz\DemoFolder2 | foreach { Get-FileHash -Path $_.FullName }

위의 명령은 두 폴더의 각 파일에 대한 hash를 가져옵니다. 이를 표시하려면 다음 명령을 실행해야 합니다:

$DestinationFolder.Hash
$SourceFolder.Hash

대상 폴더에 대한 출력은 다음과 같습니다:

BBBFED20764B6B3FAE56DF485778F5F27918B63008B0EBCAF1342CA8ADC3EADF
23D197F445E3264BF230128A7AFB9BF0E65209249D51C4AD70F51F44DF2D83C5
8FE98A01050C92CC6812B8EAD3BD5B6E0BCDC575CE7A93B242BDE497A31D7732
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C
FACF7DD67442E2EF84460669E007DA40D17D82E4448D9DBC7E575D25D6012D30
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932
CCCDDAFD5EDB60F6CDB4E20CFE9FEBE74AB15D28AD0E465B56D23247F33B3315

소스 폴더에 대한 출력은 다음과 같습니다:

FACF7DD67442E2EF84460669E007DA40D17D82E4448D9DBC7E575D25D6012D30
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932
CCCDDAFD5EDB60F6CDB4E20CFE9FEBE74AB15D28AD0E465B56D23247F33B3315

이제 우리는 두 폴더의 내용을 그들의 hash 값으로 비교할 수 있습니다. 명령을 확인하세요:

Compare-Object -ReferenceObject $SourceFolder.Hash  -DifferenceObject $DestinationFolder.Hash

위의 명령은 두 폴더의 내용을 그들의 hash로 비교하고 서로 다른 내용에 대한 hash를 출력합니다. 출력을 확인하세요:

InputObject                                                      SideIndicator
-----------                                                      -------------
BBBFED20764B6B3FAE56DF485778F5F27918B63008B0EBCAF1342CA8ADC3EADF =>
23D197F445E3264BF230128A7AFB9BF0E65209249D51C4AD70F51F44DF2D83C5 =>
8FE98A01050C92CC6812B8EAD3BD5B6E0BCDC575CE7A93B242BDE497A31D7732 =>
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C =>
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932 =>

어떤 파일이 내용이 다른지 알 수 없으므로 파일의 이름을 표시하려면 다음 명령을 실행합니다:

(Compare-Object -ReferenceObject $SourceFolder -DifferenceObject $DestinationFolder  -Property hash -PassThru).Path

위의 명령은 두 폴더에 서로 다른 내용을 포함하는 파일의 전체 경로를 보여줍니다. 출력을 확인하세요:

C:\Users\Sheeraz\DemoFolder2\composer.json
C:\Users\Sheeraz\DemoFolder2\composer.lock
C:\Users\Sheeraz\DemoFolder2\composer.phar
C:\Users\Sheeraz\DemoFolder2\delftstack.rtf
C:\Users\Sheeraz\DemoFolder2\demo.bmp
튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

관련 문장 - PowerShell Folder