rsync를 사용하여 두 디렉터리를 비교하고 차이점만 인쇄할 수 있습니까? 시험 실행 옵션이 있지만, 특정 수준으로 자세한 정보를 높이면 비교된 각 파일이 표시됩니다.
ls -alR
diff
소스 코드에 모든 줄을 다르게 만드는 하드 링크가 있기 때문에 여기에는 옵션이 없습니다 . (물론 Perl을 사용하여 이 열을 삭제할 수 있습니다.)
답변1
Niels의 답변(Google을 통해 이 질문을 접하는 모든 사람의 경우)에 추가하면 기본적으로 rsync
파일 크기와 수정 시간만 비교하여 차이점이 있는지 확인합니다. (다르면 더 많은 작업을 수행하지만 동일하면 거기서 멈춥니다.)
실제 파일을 비교하고 싶다면콘텐츠, 동일한 크기와 마지막 수정 시간을 가진 파일에 대해서도 체크섬을 사용하여 파일을 비교하도록 -c
지시하는 플래그를 추가했습니다.rsync
rsync -avnc $SOURCE $TARGET
(이 옵션은 rsync가 on 보다 새로운 파일을 -u
무시하도록 지시하는데 , 이는 내용을 비교하는 경우 아마도 수행하고 싶지 않을 것입니다.)$TARGET
$SOURCE
답변2
rsync -avun --delete
양방향으로 유사한 작업을 실행해야 할 수도 있습니다.
하지만 실제로 달성하려는 것은 무엇입니까?
고쳐 쓰다:
rsync -avun --delete $TARGET $SOURCE |grep "^deleting "
대상 디렉토리에 존재하지 않는 파일 목록을 제공합니다.
"grep delete"는 각 줄이 다음을 인쇄하기 때문입니다.삭제ing..파일..
rsync -avun $SOURCE $TARGET
"다른" 파일(새 파일 포함) 목록이 제공됩니다.
답변3
덜 익숙한 사람들을 위해 rsync
:
rsync -rvnc --delete ${SOURCE}/ ${DEST}
-r
: 디렉토리로 재귀;-v
:목록 파일)-n
: 가장 중요한 점 - 해야 할 일아니요무엇이든 바꾸십시오.-c
: 수정 시간 및 크기 대신 체크섬으로 콘텐츠를 비교합니다(-a
그렇지 않은 경우 사용됨).--delete
: 일방향 차이가 아닌 대칭적 차이를 찾으세요.- 마지막으로,
/
"디렉토리 내부를 살펴보고 그 내용을 비교하세요"를 의미합니다.콘텐츠목적지까지”.
일반적인 출력을 인쇄합니다
rsync
.
- 와<파일 이름>각 "새" 파일의 한 줄에
${SOURCE}
- 그리고"<파일 이름> 삭제".
${DEST}
- 또한 다음과 같은 경고를 인쇄할 수도 있습니다."일반적이지 않은 파일 <파일 이름> 건너뛰기"심볼릭 링크의 경우.
추신. 나는 이것이 나쁜 PS라는 것을 알고 있습니다. 그러나 그것은 정말 급하게 추가되었습니다. 그래도 사람들이 이것이 유용하다고 생각할 것입니다.
폴리페닐렌 설파이드. 또는 다음을 수행할 수 있습니다.
find $SOURCE -type f -exec md5sum {} \; | tee source.md5
find $DEST -type f -exec md5sum {} \; | tee dest.md5
파일 이름에 개행 문자가 포함되어 있지 않으면 파일 자체 *.md5
는 물론 두 파일을 모두 diff
정렬 할 수 있습니다. (이것은 파일에만 적용됩니다. 즉, 양쪽에 있는 빈 디렉터리는 감지되지 않습니다.)
답변4
귀하의 질문에서 diff를 사용하고 싶지 않다는 것을 이해합니다.LS에서, 그러나 디렉토리에서 diff를 재귀적으로 사용할 수도 있습니다.
diff -rq DIR1 DIR2