Bash의 2개 디렉터리에 있는 모든 파일의 소유권과 권한을 비교하세요.

Bash의 2개 디렉터리에 있는 모든 파일의 소유권과 권한을 비교하세요.

2개의 디렉토리에 있는 모든 파일의 파일 소유권과 권한을 가져와서 비교하려고 합니다. 이름은 같지만 파일 소유권이나 권한이 다른 파일을 신고합니다. 첫 번째 디렉터리에 있는 모든 파일의 파일 소유권과 권한을 file1.txt로 추출하고 두 번째 디렉터리의 모든 파일을 file2.txt로 추출했습니다.

내 스크립트 진행 상황:

[root@test]# cat file1.txt
644 root root /home/user2/sample-test/abc
644 root root /home/user2/sample-test/bcd
644 root root /home/user2/sample-test/efg
644 root root /home/user2/sample-test/mama
644 root root /home/user2/sample-test/ngins2
644 root root /home/user2/sample-test/nils45
644 root root /home/user2/sample-test/sample2
644 root root /home/user2/sample-test/t1
644 root root /home/user2/sample-test/t2
644 root root /home/user2/sample-test/test1
755 root root /home/user2/sample-test
644 root root /home/user2/sample-test1/abc
644 root root /home/user2/sample-test1/ppp
644 root root /home/user2/sample-test1/werwre
755 root root /home/user2/sample-test1
644 root root /home/user2/testing123

[root@test]# cat file2.txt
644 root root /home/user2/sample-test/ip
644 root root /home/user2/sample-test/new-file
644 root root /home/user2/sample-test/ngins2
644 root root /home/user2/sample-test/nils45
644 root root /home/user2/sample-test/sample2
755 root root /home/user2/sample-test
755 root root /home/user2/sample-test/test1.sh
644 apache apache /home/user2/sample-test1/ppp
644 apache fes /home/user2/sample-test1/abc
644 root root /home/user2/sample-test1/perms.saved
644 root root /home/user2/sample-test1/test
644 root root /home/user2/sample-test1/test1
644 root root /home/user2/sample-test1/werwre
755 root root /home/user2/sample-test1
755 root root /home/user2/sample-test1/1.sh
644 root root /home/user2/testing123


find /path/to/dir1 -depth -exec stat --format '%a %U %G %n' {} + | sort -n" >> file1.txt
find /path/to/dir2 -depth -exec stat --format '%a %U %G %n' {} + | sort -n" >> file2.txt

t1=`cat file1.txt`
t5=`cat file2.txt`

#find lines only in file1
only1=$(comm -23 "$t1"_sorted "$t5"_sorted)

#find lines only in file2
only2=$(comm -13 "$t1"_sorted "$t5"_sorted)

저는 다음 두 가지 상황을 처리하는 데 어려움을 겪고 있습니다.

  1. dir1 또는 dir2의 파일이 누락된 경우 이를 처리해야 합니다. dir1의 파일은 올바른 파일이지만 dir2의 파일에는 혼동되는 권한/소유권이 있습니다. dir1과 dir2의 파일을 이름은 같지만 소유권/권한이 다른 파일만 비교하고 싶습니다.

답변1

차이점을 확인하기 위한 테스트 실행

이 명령줄은 rsync다음과 같은 디렉토리 트리에서 작동합니다.

rsync -Havvn --existing source/ target | grep -v uptodate$'

행동

n가져오기 작업에 대한 옵션을 제거합니다.


귀하의 경우 홈 디렉터리와 일치하도록 명령줄을 조정해야 합니다(아마도 ssh를 통한 원격 경로 사용). 두 개의 v를 사용하면 자세한 내용을 늘릴 수 있으며 실행 가능한 플래그만 다른 출력을 얻을 수 있습니다. 작업이 수행되면 자세한 플래그 없이 문제가 해결됩니다.

관련 정보