Bagaimana saya bisa membandingkan dua direktori dengan sub direktori untuk melihat perbedaannya?
Bagaimana saya bisa membandingkan dua direktori dengan sub direktori untuk melihat perbedaannya?
Jawaban:
Di bawah Linux:
$ diff -r /first/directory /second/directory
Di bawah Windows: Anda mungkin sebaiknya mengunduh dan menginstal WinMerge, kemudian
> WinMerge /r c:\first\folder c:\second\folder
M.
Saya menggunakan berbaur di Ubuntu - ini memiliki opsi perbandingan direktori yang baik.
Beyond Compare adalah alat komersial yang baik, $ 30 atau lebih. Berjalan di bawah windows, memiliki versi eval. http://www.scootersoftware.com/
Diff biasanya digunakan untuk membandingkan dua file, tetapi dapat melakukan lebih dari itu. Dalam diff
opsi dia "r" dan "q" membuatnya bekerja secara rekursif dan diam-diam, yaitu, hanya menyebutkan perbedaan, yang hanya apa yang kita cari:
diff -rq todo_orig/ todo_backup/
Jika Anda juga ingin melihat perbedaan untuk file yang mungkin tidak ada di direktori mana pun:
diff -Nrq dir1/ dir2/
Anda juga dapat menggunakan Rsync
dan find
. Untuk find
:
find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER
Tetapi file dengan nama dan subfolder yang sama, tetapi dengan konten yang berbeda, tidak akan ditampilkan dalam daftar.
Jika Anda adalah penggemar GUI, Anda dapat memeriksa Meld . Ini berfungsi baik di windows dan linux.
DiffMerge untuk Windows menunjukkan perbedaan termasuk subfolder di jendela. Ada juga versi portabel di suatu tempat tetapi pencarian cepat mengungkapkan unduhan ini: http://www.softpedia.com/get/System/File-Management/SourceGear-DiffMerge.shtml
Saya menulis ini menggunakan cmdlet Compare-Objects di 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."} }