2017-03-20 4 views
2

이전 프로젝트의 일부 유틸리티를 다른 사용자 이름으로 동일한 디스크에있는 새로운 버전 관리 대상 유틸리티로 옮깁니다. 이전 계정에 포함 된 유틸리티를 찾는 작업을했습니다. 새로운 계정은 아니며 두 계정간에 다른 파일을 찾을 수 있습니다. 새 계정은 약 1 년 동안 활성화되었으며 사람들은 새 계정을 만들지 않고 이전 계정의 일부 파일을 변경했습니다.두 개의 디렉토리에서 파일과 버전을 비교합니다. 그 중 하나에는 심볼릭 링크가 있습니까?

이 유틸리티는 (내 자신의 홈 폴더 제외) 읽기 전용 액세스 권한이있는 원격 서버에 있습니다.

이전 계정은 user1이라고하고 각 유틸리티의 소스, 실행 파일 및 스크립트를 포함하여 ~ user1/bin/폴더에 모든 유틸리티가 있습니다.

~ user2/bin/폴더의 각 '실행 파일/스크립트'가 하위 폴더 ~ user2/src/{유틸리티 이름의 해당 파일에 대한 심볼릭 링크 인 방식으로 새 계정 인 user2가 설정되었습니다 } /는 실행 파일의 소스도 포함합니다.

수동으로 다른/실종을 확인하려면

find ~user1/bin/ -maxdepth 1 -printf '%s, %p\n' | sort -k2 > user1.txt 
find -L ~user2/bin/ -maxdepth 1 -printf '%s, %p\n' | sort -k2 > user2.txt 

하고 그 결과를 비교하는 것보다 두 디렉토리를 비교하는 쉬운 방법이 있나요?

위의 명령을 사용하면 ~ user2/bin/폴더의 실행 파일/스크립트 만 비교할 수 있습니다. ~ user2/src/{utilityname} /의 소스 코드가 user1 와 user2 (예 : 스크립트의 경로가 다르기 때문에). 유틸리티의 심볼릭 링크 대상이 같은 이름의 소스 파일에있는 폴더를 검색 할 수 있습니까? 그래서 user1과 user2 사이의 소스 파일을 직접 비교할 수 있습니까?

+0

당신이 단지 1 깊이 만 가고 있기 때문에 아마도'diff -r ~/user1/bin ~/user2/bin'을 시도해보십시오. –

+0

@ I'L'I yeah bin 폴더에서 작동하고'~ user2/bin'에서 누락 된 것이 무엇인지 보여주는 diff -r'을 시도했지만 버전을 비교하려면 소스를 비교해야합니다. user1의 소스는'~ user1/bin'에 있지만 user2의 소스는'~ user2/src/{utilityname}''에 있으며'~ user2/bin'에 소스 파일에 대한 심볼릭 링크가 없습니다. 지금은 각 bin에있는 '유틸리티 이름'스크립트/실행 파일마다 수동으로 소스를 'diff ~ user1/bin/utilityname.c ~ byab334/src/utilityname/utilityname.c'와 비교합니다. –

+0

너무 깁니다. 나쁜 당신은 읽기 권한이 있습니다; 심볼릭 링크를 만들면 그 대부분을 해결할 수 있습니다. 당신이 할 수있는 또 다른 일은 특정 파일/디렉토리를 쌍으로 묶을지도 모르는 맵 파일을 만드는 것입니다. 그러나 이상적인 해결책은 아닙니다. –

답변

1

다른 접근법을 사용합니다. 중복 된 파일이없는 파일을 찾습니다.

fdupes -r backup/ documents/ > dup.txt 
find backup/ -type f | grep -Fxvf dup.txt 

비록, 예를 들어, 여러분의 필요에 fdupes ' "-s"옵션의 사용을 적응하기 위해 좀 더 조정해야 할 수도 있습니다 : 나는 특히 fdupes, findgrep를 결합 부분은 this thread을 제안한다.