diff는 재귀적으로 작동하지 않습니다.

diff는 재귀적으로 작동하지 않습니다.

명령줄 util을 사용하여 두 디렉터리를 재귀적으로 비교하려고 합니다 diff. 다음과 같은 내용을 포함하는 두 개의 폴더 diff1및 가 있습니다 diff2.

여기에 이미지 설명을 입력하세요

diff2비었다. 하지만 내가 할 때 diff -r diff1 diff2나는 단지 얻을

$ diff -r diff1 diff2
Only in diff1: folder
Only in diff1: test.html

이것은 짜증나는 일이다. 재귀적으로 작업 하려면 어떻게 해야 합니까 diff? 시도해 보았지만 --recursive도움이 되지 않습니다. 저는 El Capitan에 있는데 가 diff -v저를 사로잡습니다 diff (GNU diffutils) 2.8.1.

답변1

귀하가 경험한 동작은 의도적으로 설계된 것입니다. 이외의 도구를 허용하지 않으면 원하는 것을 얻을 수 없다고 생각합니다 diff. 귀하의 의견에서 :

"재귀적으로" 읽을 때 프로세스가 첫 번째 수준에서 멈추지 않을 것이라고 가정합니다.

첫 번째 수준 때문에 멈추지 않습니다. 재귀가 무엇을 의미하는지 염두에 두십시오.

다음과 같은 기능을 사용하여자신의 코드 내에서 자신을 호출

(원천:여기; 내 강조)

foo에 공통 하위 디렉터리가 있다고 가정해 보세요 . 재귀는 특정 지점에서 원래 명령이 호출됨을 의미합니다 .diff1diff2diff -r diff1 diff2

diff -r diff1/foo diff2/foo

좋습니다. 실제로 이것은 단일 프로세스 내에서 자신을 호출하는 서브루틴에 의해 수행될 가능성이 높습니다(그러나 실제로 diff실행 파일을 호출하는 구현도 가능하다고 생각합니다). 그래도 논리적으로는 이렇습니다.

당신은 가지고 있지만 diff1/folder없습니다 diff2/folder. diff이것을 비교하기 위해 어떻게 전화할 수 있습니까 ? 즉, <unknown_name>아래 양식에서 원하는 출력을 얻으려면 무엇이 되어야 합니까?

diff -r diff1/folder diff2/<unknown_name>

<unknown_name>맞는게 하나도 없습니다 . Recursive는 recursive 또는 와 같은 것으로 바뀌지 않고는 diff로 내려갈 수 없습니다 . 재귀적이 거나 그 일이 아닙니다.folderlsfindlsfind

그래도 배운 후에 or (기본적으로 재귀) 를 diff1/folder사용하여 쿼리할 수 있습니다 .ls -RfinddiffOnly in diff1: folder

관련 정보