Comment comparer des dossiers dans PowerShell

Comment comparer des dossiers dans PowerShell

Ce tutoriel démontre comment comparer deux dossiers en utilisant PowerShell.

Comparer des dossiers PowerShell

Comparer deux dossiers dans PowerShell est un processus facile étape par étape. Nous pouvons utiliser la méthode Compare-Object de PowerShell pour comparer le contenu des dossiers donnés.

Voir le processus étape par étape pour les deux dossiers donnés :

Dossier 1

Dossier 2

Obtenez le contenu des dossiers

La première étape consiste à obtenir le contenu du dossier donné. Tout d’abord, exécutez les commandes suivantes pour obtenir les fichiers des dossiers :

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

La commande ci-dessus obtiendra le contenu du dossier. Et pour afficher le contenu, appelez la variable déclarée :

$SourceFolder

La sortie pour le contenu du dossier source est :

    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

La sortie pour le contenu du dossier de destination est :

    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

Calculez le nombre de fichiers et la taille des dossiers donnés

C’est une étape facultative où nous comptons le nombre de fichiers avec des extensions particulières dans chaque dossier et calculons la taille de chaque dossier. Exécutez les commandes suivantes.

Comptez le nombre de fichiers avec une extension particulière dans chaque dossier :

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

La commande ci-dessus comptera le nombre de fichiers avec l’extension .java dans le dossier de destination. La sortie que nous obtiendrons pour notre dossier est de 2.

De même, dans le dossier source :

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

La commande ci-dessus comptera les fichiers dans le dossier source avec l’extension .java. La sortie que nous obtiendrons pour notre dossier est de 2.

Maintenant, pour calculer la taille du dossier donné, exécutez les commandes suivantes :

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

Les commandes ci-dessus calculeront la taille de chaque dossier donné. La sortie pour nos dossiers est la suivante :

3061806
128054

Comparer les dossiers donnés par nom

Nous allons d’abord comparer les dossiers par le nom de leur contenu, ce qui ne compare pas le contenu à l’intérieur des fichiers. Voir la commande :

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

La commande ci-dessus comparera le contenu des dossiers par leurs noms et affichera les fichiers différents dans les deux dossiers. Voir la sortie :

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

Cela montre que ces cinq fichiers sont différents du dossier source par leur nom.

Comparer les dossiers donnés par le contenu des fichiers

Dans la dernière étape, nous allons comparer le dossier par le contenu de leurs fichiers. Pour effectuer cette opération, nous devons d’abord convertir les fichiers dans les dossiers en hash.

La commande hash est facile à utiliser. Par exemple :

Get-FileHash 'Delftstack.java'

La commande ci-dessus obtiendra le hash pour le fichier Delftstack.java. Voir la sortie :

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

Pour obtenir le hash pour chaque fichier dans le dossier, nous devons exécuter la boucle foreach. Voir les commandes :

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

Les commandes ci-dessus obtiendront le hash pour chaque fichier dans les deux dossiers. Pour les afficher, nous devons exécuter les commandes suivantes :

$DestinationFolder.Hash
$SourceFolder.Hash

La sortie pour le dossier de destination est :

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

La sortie pour le dossier source est :

FACF7DD67442E2EF84460669E007DA40D17D82E4448D9DBC7E575D25D6012D30
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932
CCCDDAFD5EDB60F6CDB4E20CFE9FEBE74AB15D28AD0E465B56D23247F33B3315

Maintenant, nous pouvons comparer le contenu des deux dossiers par leur valeur hash. Voir la commande :

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

La commande ci-dessus comparera le contenu de deux dossiers par leur hash et affichera le hash pour le contenu différent. Voir la sortie :

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

Comme nous ne pouvons pas voir quel fichier a un contenu différent, pour afficher le nom des fichiers, exécutez la commande suivante :

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

La commande ci-dessus affichera le chemin complet vers les fichiers contenant du contenu différent dans les deux dossiers. Voir la sortie :

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
Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
Auteur: 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

Article connexe - PowerShell Folder