Comment puis-je comparer deux répertoires avec des sous-répertoires pour voir où est la différence?
Comment puis-je comparer deux répertoires avec des sous-répertoires pour voir où est la différence?
Réponses:
Sous Linux:
$ diff -r /first/directory /second/directory
Sous Windows: vous feriez probablement mieux de télécharger et d'installer WinMerge, puis
> WinMerge /r c:\first\folder c:\second\folder
M
J'ai utilisé meld sur Ubuntu - il a une bonne option de comparaison de répertoires.
Beyond Compare est un bon outil commercial, environ 30 $. Fonctionne sous Windows, a une version d'évaluation. http://www.scootersoftware.com/
Diff est normalement utilisé pour comparer deux fichiers, mais peut faire bien plus que cela. Dans les diff
options "r" et "q", il fonctionne de manière récursive et silencieuse, c'est-à-dire en ne mentionnant que les différences, c'est exactement ce que nous recherchons:
diff -rq todo_orig/ todo_backup/
Si vous souhaitez également voir les différences pour les fichiers qui peuvent ne pas exister dans l'un ou l'autre répertoire:
diff -Nrq dir1/ dir2/
Vous pouvez également utiliser Rsync
et find
. Pour find
:
find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER
Mais les fichiers portant les mêmes noms et dans les mêmes sous-dossiers, mais avec un contenu différent, ne seront pas affichés dans les listes.
Si vous êtes un fan de GUI, vous pouvez vérifier Meld . Cela fonctionne très bien sous Windows et Linux.
DiffMerge pour Windows montre les différences, y compris les sous-dossiers dans une fenêtre. Il existe également une version portable quelque part mais une recherche rapide a révélé ce téléchargement: http://www.softpedia.com/get/System/File-Management/SourceGear-DiffMerge.shtml
J'ai écrit ceci en utilisant l'applet de commande Compare-Objects dans Powershell:
#set the directories
$firstdirectory = Read-Host "What is the first directory you wish to compare?" $seconddirectory = Read-Host "What is the second directory you wish to compare?"
#Check if the user wants to compare subdirectories
$recursivesearch = Read-Host "Do you wish to compare subdirectories? Please enter yes or no." If ($recursivesearch -eq "yes")
#get the contents
{ $firstdirectorycontents = @(Get-ChildItem $firstdirectory -Recurse) $seconddirectorycontents = @(Get-ChildItem $seconddirectory -Recurse ) }
else { $firstdirectorycontents = @(Get-ChildItem $firstdirectory) $seconddirectorycontents = @(Get-ChildItem $seconddirectory) }
#compare the objects and handle errors
if ($firstdirectorycontents.Count -eq 0 )
{
Write-Host "No files were found in the first directory, the directories cannot be compared."
}
elseif ($seconddirectorycontents.Count -eq 0)
{
Write-Host "No files were found in the second directory, the directories cannot be compared."
}
else
{
try
{
Compare-Object -ReferenceObject $firstdirectorycontents -DifferenceObject $seconddirectorycontents
}
catch {"Another error occured."} }