
명령줄 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
에 공통 하위 디렉터리가 있다고 가정해 보세요 . 재귀는 특정 지점에서 원래 명령이 호출됨을 의미합니다 .diff1
diff2
diff -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
로 내려갈 수 없습니다 . 재귀적이 거나 그 일이 아닙니다.folder
ls
find
ls
find
그래도 배운 후에 or (기본적으로 재귀) 를 diff1/folder
사용하여 쿼리할 수 있습니다 .ls -R
find
diff
Only in diff1: folder