차이점에 대해 두 디렉토리 (하위 디렉토리 포함)를 비교하는 방법은 무엇입니까?


14

두 디렉토리를 하위 디렉토리와 비교하여 차이점이 어디에 있는지 어떻게 알 수 있습니까?


6
운영 체제를 확인하십시오.
Maximus Minimus

두 디렉토리 사이에 다른 파일이 있는지 또는 파일의 내용이 다른지 알고 싶습니까?
매트 시몬스

답변:


20

리눅스에서 :

$ diff -r /first/directory /second/directory

Windows에서 : 아마도 WinMerge를 다운로드하고 설치하는 것이 좋습니다.

> WinMerge /r c:\first\folder c:\second\folder

미디엄


3
나는 지금 diff -qrl을 사용합니다 ...
alexus

1
GUI에 명령 프롬프트를 사용하지 않고 / r 스위치를 지정하는 옵션이 있습니까?
옴 타라

@Omtara, WinMerge를 시작한 후 파일-열기를 선택하십시오. 열린 대화 상자에서 // Include Subfolders //를 선택하십시오. Windows 탐색기에서 두 개의 폴더를 선택하여 WinMerge를 열면 셸 통합을 구성하십시오. 편집-옵션 열기; 범주 // 쉘 통합으로 이동하여 // 기본적으로 하위 폴더 포함 //을 확인합니다.
R. Schreurs

2

우분투에서 meld 를 사용 했습니다-디렉토리 비교 옵션이 좋습니다.


meld의 경우 +1, 일반적으로 diff와 같은 명령 줄 옵션을 좋아하지만 시각적으로 두 디렉토리의 실제 다른 폴더를 한 눈에 볼 수있는 것은 매우 유용합니다. meld와 diff는 2018 년에이 문제를 발견 한 다른 사람들을 위해 Ubuntu 16.04 및 Ubuntu 18.04에서 여전히 잘 작동합니다. 물론 Windows에서 WinMerge는 훌륭한 옵션입니다. Meld가 Windows에서 작동한다고 들었지만 아직 개인적으로 시도하지는 않았습니다.
Ken

1

Beyond Compare는 30 달러 정도의 훌륭한 상용 도구입니다. Windows에서 실행되며 평가 버전이 있습니다. http://www.scootersoftware.com/


1

Windows에서는 windiff가 그렇게 생각하지만 Winmerge 는이 작업에 가장 적합한 도구입니다. 오픈 소스이며 두 세트의 디렉토리 트리를 비교하는 매우 깔끔한 작업을 수행합니다.

편집 : 죄송합니다, 마리우스에 의해 구타


1

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를 확인할 수 있습니다 . 윈도우와 리눅스 모두에서 잘 작동합니다.



0

Powershell에서 Compare-Objects cmdlet을 사용하여 이것을 작성했습니다.

#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."} }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.