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 :
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
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