Як я можу порівняти два каталоги з підручниками, щоб побачити, де різниця?
Як я можу порівняти два каталоги з підручниками, щоб побачити, де різниця?
Відповіді:
Під Linux:
$ diff -r /first/directory /second/directory
У Windows: ви, мабуть, краще завантажити та встановити WinMerge, тоді
> WinMerge /r c:\first\folder c:\second\folder
М
Я використовував meld на Ubuntu - він має хороший варіант порівняння каталогів.
Більше порівняння - хороший комерційний інструмент - 30 доларів або близько того. Працює під вікнами, має eval версію. http://www.scootersoftware.com/
Diff зазвичай використовується для порівняння двох файлів, але може зробити набагато більше, ніж це. У diff
параметрі "r" і "q" змушують це працювати рекурсивно і тихо, тобто лише згадуючи відмінності, а саме це ми шукаємо:
diff -rq todo_orig/ todo_backup/
Якщо ви також хочете побачити відмінності для файлів, які можуть не існувати в жодному каталозі:
diff -Nrq dir1/ dir2/
Ви також можете використовувати Rsync
і find
. Для find
:
find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER
Але файли з однаковими іменами та в тих самих папках, але з різним вмістом, у списках не відображатимуться.
Якщо ви шануєте GUI, ви можете перевірити Meld . Він чудово працює як в Windows, так і в Linux.
DiffMerge для Windows показує відмінності, включаючи вкладені папки у вікні. Десь також є портативна версія, але швидкий пошук виявив це завантаження: http://www.softpedia.com/get/System/File-Management/SourceGear-DiffMerge.shtml
Я написав це, використовуючи командлет Порівняння об’єктів у 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."} }