Come confrontare le cartelle in PowerShell

Come confrontare le cartelle in PowerShell

Questo tutorial dimostra come confrontare due cartelle utilizzando PowerShell.

Confrontare Cartelle PowerShell

Confrontare due cartelle in PowerShell è un processo semplice e passo dopo passo. Possiamo utilizzare il metodo Compare-Object di PowerShell per confrontare il contenuto delle cartelle date.

Vedi il processo passo passo per le due cartelle date:

Cartella 1

Cartella 2

Ottieni i Contenuti delle Cartelle

Il primo passo è ottenere i contenuti della cartella data. Prima, esegui i seguenti comandi per ottenere i figli delle cartelle:

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

Il comando sopra preleverà il contenuto della cartella. E per mostrare i contenuti, chiama la variabile dichiarata:

$SourceFolder

L’output per il contenuto della cartella sorgente è:

    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

L’output per il contenuto della cartella di destinazione è:

    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

Calcola il Numero di File e la Dimensione delle Cartelle Dato

Questo è un passo facoltativo in cui contiamo il numero di file con estensioni particolari in ciascuna cartella e calcoliamo la dimensione di ciascuna cartella. Esegui i seguenti comandi.

Conta il numero di file con una particolare estensione in ciascuna cartella:

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

Il comando sopra conterà il numero di file con l’estensione .java nella cartella di destinazione. L’output che otterremo per la nostra cartella è 2.

Allo stesso modo, nella cartella sorgente:

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

Il comando sopra conterà i file nella cartella sorgente con l’estensione .java. L’output che otterremo per la nostra cartella è 2.

Ora per calcolare la dimensione della cartella data, esegui i seguenti comandi:

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

I comandi sopra calcoleranno la dimensione di ciascuna cartella data. L’output per le nostre cartelle è il seguente:

3061806
128054

Confronta le Cartelle Dato per Nome

Confronteremo prima le cartelle in base al nome del loro contenuto, che non confronta il contenuto all’interno dei file. Vedi il comando:

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

Il comando sopra confronterà il contenuto delle cartelle in base ai loro nomi e mostrerà i file diversi in entrambe le cartelle. Vedi l’output:

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

Mostra che questi cinque file sono diversi dalla cartella sorgente per nome.

Confronta le Cartelle Dato per Contenuto dei File

Nell’ultimo passo, confronteremo la cartella in base al contenuto dei loro file. Per eseguire questa operazione, prima dobbiamo convertire i file nelle cartelle in hash.

Il comando hash è facile da usare. Ad esempio:

Get-FileHash 'Delftstack.java'

Il comando sopra otterrà l’hash per il file Delftstack.java. Vedi l’output:

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

Per ottenere l’hash per ciascun file nella cartella, dobbiamo eseguire il ciclo foreach. Vedi i comandi:

$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 }

I comandi sopra otterranno l’hash per ciascun file in entrambe le cartelle. Per mostrarli, dobbiamo eseguire i seguenti comandi:

$DestinationFolder.Hash
$SourceFolder.Hash

L’output per la cartella di destinazione è:

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

L’output per la cartella sorgente è:

FACF7DD67442E2EF84460669E007DA40D17D82E4448D9DBC7E575D25D6012D30
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932
CCCDDAFD5EDB60F6CDB4E20CFE9FEBE74AB15D28AD0E465B56D23247F33B3315

Ora possiamo confrontare il contenuto di entrambe le cartelle in base al loro valore di hash. Vedi il comando:

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

Il comando sopra confronterà il contenuto di due cartelle in base al loro hash e restituirà l’hash per contenuti diversi. Vedi l’output:

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

Poiché non possiamo vedere quale file ha contenuti diversi, per mostrare il nome dei file, esegui il seguente comando:

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

Il comando sopra mostrerà il percorso completo ai file contenenti contenuti diversi in entrambe le cartelle. Vedi l’output:

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
Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
Autore: 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

Articolo correlato - PowerShell Folder