내부에 서로 다른 폴더가 있는 두 개의 폴더가 있습니다. 이 폴더에는 다른 파일도 포함되어 있습니다. 저는 이 두 상위 폴더 간의 차이점을 제공할 수 있는 명령을 찾고 있습니다. 한 폴더에 포함된 파일과 다른 폴더에 포함되지 않은 파일 사이에는 차이가 있을 뿐만 아니라 파일 내용에도 차이가 있습니다.
지금까지 나는 이것을 해왔습니다: diff -rq fold1 fold2
..그러나 그것은 이 파일들 사이의 차이점을 제공하지 않습니다.
어떤 명령을 실행할 수 있나요?
답변1
어쩌면 당신은 사용할 수 있습니다동기화이를 수행하기 위한 기술입니다.
rsync --dry-run --delete --recursive --verbose dir1/ dir2
또는 짧은 버전
rsync -nrv --delete dir1/ dir2
--dry-run 또는 -n 옵션을 잊지 마세요. 그렇지 않으면 대상 디렉터리(dir2)가 소스 디렉터리(dir1)와 동일해집니다.
그러면 디렉터리 이름, 파일 이름, 파일 내용을 포함하여 두 디렉터리 간의 차이점이 출력됩니다. (서로 다른 두 컴퓨터의 디렉터리 2개를 비교할 수도 있습니다)
sending incremental file list
deleting dir3-1/ # this directory (name) doesn't exist in source directory
deleting file2.txt # this file (name) doesn't exist in source directory
file1.txt # this file is different (content) from the source files
dir3/ # this directory (name) doesn't exist in destination directory
sent 95 bytes received 21 bytes 232.00 bytes/sec
total size is 4 speedup is 0.03 (DRY RUN)
답변2
폴더 차이점에 대해서는 시도해 볼 수 있습니다
ls -R fold1 > list1
ls -R fold2 > list2
diff list1 list2.
그러나 diff
파일의 경우 스크립트를 작성해야 할 것 같습니다(아마도 ls -R 출력을 구문 분석).
다소 해킹된 솔루션:
find fold1 -type f|while read x; do [ -e fold2/$x ] && diff fold1/$x fold2/$x >> files_diff.out; done
그러나 이는 가장 우아하거나 효율적인 접근 방식이 아닐 수도 있습니다. Bash에 좀 더 익숙한 사람이 더 나은 방법을 생각해낼 수 있을 것이라고 확신합니다. Perl에 능숙하다면 File::Find 모듈을 사용하는 것이 좋습니다.