diff -q dir1 dir2
위의 명령은 모두 문제가 있는 파일 '에서' dir2 dir1 발견한 '가 아닌' 아니라 '에서', '아닌' dir1 dir2 파일
파일을 찾기 위해 노력하고 있지만 '나는' 에서 'dir1 dir2' 뿐입니다.
dir1 dir2 dir3
1.txt 1.txt 1.txt
2.txt 3.txt 3.txt
5.txt 4.txt 5.txt
6.txt 7.txt 8.txt
또 다른 질문을 on my mind) 는 파일 '에서' 어떻게 'dir1 다운로드합니까 dir2 dir3 단일 명령' 이 아니라 '또는'?
이 어떻게해야합니다 작업:
diff -rq dir1 dir2
옵션 설명 (비교를 통해 (1) [맨페이지] (https://linux.die.net/man/1/diff):
이렇게 좋은 방법 '을 (를)', '비교' 그 '차이' md5sum 찾습니다찾기 사용할 수 있습니다.
예:
'찾기' 를 사용할 수 있는 모든 파일이 디렉토리에는 계산하십시오 각 파일에 대한 md5 해시 다음 목록 및 파이프 redhat. 파일:
find /dir1/ -type f -exec md5sum {} \; > dir1.txt
똑같이 다른 절차를 디렉터리입니다.
find /dir2/ -type f -exec md5sum {} \; > dir2.txt
그 결과, 두 개의 파일을 비교하십시오 " 함께 diff":
diff dir1.txt dir2.txt
이 전략은 두 디렉터리용 같은 시스템과 비교할 때 매우 유용합니다 않은 자가 디렉터리용 파일이 모두 있는지 확인해야 합니다.
git diff --no-index dir1/ dir2/
감사합니다.!
이후 충족되지 않은 모든 기능과 불필요하게 긴 답변 대부분 매우 느리게 작동합니까, 내가 내 스스로 파이썬 스크립트를 출력입니다 생산하고 대규모 디렉터리용 작성했습니까 비교하십시오 2 폴더.
많은 다른 솔루션과 달리, 이 doesn& # 39, t 비교하십시오 컨텐트에서 파일. 또 다른 컨텍스트에서는 서브디렉토리가 doesn& # 39, t 들어가 있는 누각되었습니다 디렉터리입니다. 그래서 출력물에는 스크립트입니다 매우 간결하고 빠른 속도.
#!/usr/bin/env python3
import os, sys
def compare_dirs(d1: "old directory name", d2: "new directory name"):
def print_local(a, msg):
print('DIR ' if a[2] else 'FILE', a[1], msg)
# ensure validity
for d in [d1,d2]:
if not os.path.isdir(d):
raise ValueError("not a directory: " + d)
# get relative path
l1 = [(x,os.path.join(d1,x)) for x in os.listdir(d1)]
l2 = [(x,os.path.join(d2,x)) for x in os.listdir(d2)]
# determine type: directory or file?
l1 = sorted([(x,y,os.path.isdir(y)) for x,y in l1])
l2 = sorted([(x,y,os.path.isdir(y)) for x,y in l2])
i1 = i2 = 0
common_dirs = []
while i1<len(l1) and i2<len(l2):
if l1[i1][0] == l2[i2][0]: # same name
if l1[i1][2] == l2[i2][2]: # same type
if l1[i1][2]: # remember this folder for recursion
common_dirs.append((l1[i1][1], l2[i2][1]))
else:
print_local(l1[i1],'type changed')
i1 += 1
i2 += 1
elif l1[i1][0]<l2[i2][0]:
print_local(l1[i1],'removed')
i1 += 1
elif l1[i1][0]>l2[i2][0]:
print_local(l2[i2],'added')
i2 += 1
while i1<len(l1):
print_local(l1[i1],'removed')
i1 += 1
while i2<len(l2):
print_local(l2[i2],'added')
i2 += 1
# compare subfolders recursively
for sd1,sd2 in common_dirs:
compare_dirs(sd1, sd2)
if __name__=="__main__":
compare_dirs(sys.argv[1], sys.argv[2])
사용 예제:
user@laptop:~$ python3 compare_dirs.py dir1/ dir2/
DIR dir1/out/flavor-domino removed
DIR dir2/out/flavor-maxim2 added
DIR dir1/target/vendor/flavor-domino removed
DIR dir2/target/vendor/flavor-maxim2 added
FILE dir1/tmp/.kconfig-flavor_domino removed
FILE dir2/tmp/.kconfig-flavor_maxim2 added
DIR dir2/tools/tools/LiveSuit_For_Linux64 added
첫 번째 또는 스케쳐내 프로그램만 볼 수 있는 파일을 디렉터리입니다.
user@laptop:~$ python3 compare_dirs.py dir2/ dir1/ | grep dir1
DIR dir1/out/flavor-domino added
DIR dir1/target/vendor/flavor-domino added
FILE dir1/tmp/.kconfig-flavor_domino added
추신 비교하십시오 할 경우 해시 파일을 파일 크기 및 변경, 내가 게시됨에 잠재적인 업데이트된 스크립트입니다 있습니다. https://gist.github.com/amakukha/f489cbde2afd32817f8e866cf4abe779
다른 (어쩌면 더 큰 디렉터리용) 외곽진입:
$ find dir1 | sed 's,^[^/]*/,,' | sort > dir1.txt && find dir2 | sed 's,^[^/]*/,,' | sort > dir2.txt
$ diff dir1.txt dir2.txt
'명령' sed "의 첫 번째 디렉터리입니다 절감뿐만 구성 요소 [덕분에 에릭 의 post] (https://stackoverflow.com/a/5312007/761131))
조금 늦은 수 있지만 이것은 누군가를 도와라. 이런 경우 diff 또는 파일 형식을 rsync 바닥에 그냥 베어 있는 아웃해야 확실하지 않다. 그 좋은 솔루션이므로 플한 덕분에 준 데 대해 어떤 난 확장됨 빛위에 같습니다.
그래서 그냥 # 39 의 파일 이름을 스케쳐내 it& 필요한 파일 형식, 깨끗한 복사합니다를 그냥 쉽게 찾기 명령을 사용할 수 있습니다.
comm -23 <(find dir1 | sed 's/dir1/\//'| sort) <(find dir2 | sed 's/dir2/\//'| sort) | sed 's/^\//dir1/'
모두 같은 상위 폴더 및 dir2 dir1 가정합니다. sed 그냥 상위입니다 폴더에서는 절감뿐만 비교할 수 있도록 함께 사과 사과. 그냥 이름을 다시 마지막 sed dir1 놓습니다.
그냥 경우 파일:
comm -23 <(find dir1 -type f | sed 's/dir1/\//'| sort) <(find dir2 -type f | sed 's/dir2/\//'| sort) | sed 's/^\//dir1/'
마찬가지로 디렉터리.
comm -23 <(find dir1 -type d | sed 's/dir1/\//'| sort) <(find dir2 -type d | sed 's/dir2/\//'| sort) | sed 's/^\//dir1/'
또한 이 수락됨 오토메이티드 파일 나열, 서로 다르지만 모두 존재하는 디렉터리용 컨텐트입니다. 목록에 존재하는 파일만 dir1 사용할 수 있습니다.
diff -r dir1 dir2 | grep 'Only in' | grep dir1 | awk '{print $4}' > difference1.txt
설명:
diff - boot-r dir1 dir2: 비교
[kdiff3] (http://kdiff3.sourceforge.net) 는 diff 인터페이스입니다 좋은 파일 및 디렉터리.
작동하잖아 Windows, Linux, macOS.
여러 가지 방법으로 설치할 수 있습니다.
이것은 배시 스크립트에 대한 두 개의 디렉터리용 인쇄하려면 명령의세 동기화
dir1=/tmp/path_to_dir1
dir2=/tmp/path_to_dir2
diff -rq $dir1 $dir2 | sed -e "s|Only in $dir2\(.*\): \(.*\)|cp -r $dir2\1/\2 $dir1\1|" | sed -e "s|Only in $dir1\(.*\): \(.*\)|cp -r $dir1\1/\2 $dir2\1|"