1400개의 하위 폴더가 포함된 폴더와 1.399개의 하위 폴더가 포함된 폴더를 비교하려고 합니다. 어떤 하위 폴더가 누락되었는지 알아야 합니다.
나는 이것을 시도했습니다 :
diff -rq dir1/ dir2/ | grep dir1/ | awk '{print $4}' > difference1.txt
그런데 6시간이 지났는데도 여전히 출력이 없습니다. ls
폴더에서는 거의 즉각적이므로 diff보다 빠른 방법이 있습니까?
답변1
diff -u <(ls dir1) <(ls dir2)
이렇게 하면 diff
하위 디렉터리 내부를 볼 수 없습니다.
아니면 용감하다면 이것을 시도해 보세요 ;)
diff -u <(find dir1/ -maxdepth 1 -type d -exec basename {} \;) <(find dir2/ -maxdepth 1 -type d -exec basename {} \;)
답변2
의 경우 이는 매우 간단한 작업입니다 rsync
.
rsync -n -av dir1/ dir2/ | grep '/$' | grep -Fvx './'
rsync
이렇게 하면 dir1
ing into의 내용을 테스트 실행 dir2
하고 최상위 디렉터리 자체를 제외하고 슬래시로 끝나는 줄(디렉터리)만 표시합니다.
다음은 간단한 테스트/데모입니다.
$ # create 1500 folders in dir1:
$ for i in $(jot -w %04d 1500); do mkdir -p dir1/dir-$i; done
$ # clone dir1 to dir2, then remove one directory:
$ rsync -a dir1/ dir2/
$ rmdir dir2/dir-0749/
$ # rsync -n will tell you which one is missing:
$ time rsync -n -av dir1/ dir2/ | grep '/$' | grep -Fvx './'
dir-0749/
real 0m0.038s
user 0m0.001s
sys 0m0.041s
dir1
누락 되었지만 존재하는 폴더를 확인하기 위해 이 기술을 채택하려면 다음 옵션을 dir2
사용하십시오 .rsync
--delete
$ rmdir dir1/dir-0479/
$ time rsync -nav --delete dir1/ dir2/ | grep '/$' | grep -Fvx './'
deleting dir-0479/
dir-0749/
이 줄은 가 에는 없지만 에는 있음 을 deleting ...
알려줍니다 .dir-0479
dir1
dir2
답변3
시도 해봐
ls dir1 > file1; ls dir2 > file2; diff file1 file2
또는 하위 디렉터리에 대한 가장 유용한 방법인 vimdiff 및 tree가 있는 경우 사용할 수 있습니다.
tree dir1 > file1; tree dir2 > fiel2; vimdiff file1 file2
그러나 ls를 실행하는 것은 원하는 트리보다 훨씬 빠릅니다.
예를 들어 차이점이 dir1의 하위 디렉터리에 있는 경우입니다.
dir1
- dir2
- dir3
- dir4
vs
dir2
- dir2
- dir3
당신은 할 필요가
ls -R dir1 > file1; ls -R dir2 > file2; vimdiff file1 file2
답변4
diff <(트리-d dir_A) <(트리-d dir_B)