누락된 디렉터리를 찾기 위해 두 폴더의 ls 출력을 어떻게 비교합니까?

누락된 디렉터리를 찾기 위해 두 폴더의 ls 출력을 어떻게 비교합니까?

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이렇게 하면 dir1ing 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-0479dir1dir2

답변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)

관련 정보