2014-01-29 2 views
1

이 문제를 방지하기 위해 필자는 bash 스크립트만으로 질문을 좁혔다. EDITED 질문네트워크 공유에서 Bash 스크립트로 중복 파일 제거

나는 소규모 네트워크를 실행하고 백업 루틴에서 실수를했다. 나는 매일 rsync을 운영하고 있는데, 어떻게 설정되는지는 소스에서 폴더의 이름이 바뀌면 백업 장치에 잠재적 인 복제가 발생할 수 있다는 것입니다.

rsync -varz --no-perms --exclude-from=/path/to/exclude_file --log-file=/path/to/rsync_logs

최근 사용자가 꽤 몇 가지 변경을하고, 중복 많은 결과.

어떤 종류의 bash 스크립트 전략을 사용하여 공격 할 수 있습니까? 재귀 적으로 목록을 작성하고 파일로 출력하고 diff을 사용하여 비교했습니다. 이로 인해 복제 문제의 영향을 알게되었습니다. 중복 제거를 위해 자동화 된 프로세스를 사용할 수 있다면 시간이 많이 걸릴 것입니다.

find /mnt/data/ -maxdepth 2 -mindepth 1 -type d -printf '%f\n' > data.txt

과에 비교 :

나는 이런 식으로 뭔가를 시도하여 시작

drwxr-xr-x 0 bob staff 0 Jun 25 2009 7-1-08 
drwxr-xr-x 0 bob staff 0 Jun 25 2009 2008-07-01 

이를 :

find /mnt/backup/ -maxdepth 2 -mindepth 1 -type d -printf '%f\n' > backup.txt

내 문제의 예이있다 의 예입니다. 백업 드라이브가 있고 두 디렉토리의 내용이 동일합니다. 백업이 모두 포함 된 소스는이 하나를 가지고 문제의

drwxr-xr-x 0 bob staff 0 Jun 25 2009 2008-07-01 

이 종류는 모든 백업 드라이브에 걸쳐있다.

편집

나는이 목록을 작성 diff 그들을 에드와 수동 겪었하고 변경 사항을 조정. 일단 내가 그것에 빠지면 원래 생각만큼 나쁘지 않았습니다. 내가 각 답변에서 조각을 사용하여 끝내기 때문에 나는 여기에 (@Mark Pettit과 @ebarrere) 두 답에 +1을 주었다. 이 실험 과정에서 몇 가지 찾기 명령을 실행하고 더 구체적으로 내 rsync 스크립트를 변경했습니다. 고마워.

답변

2

rsync 스크립트를 수정하기위한 @ Mark의 제안에 동의하지만 findexec을 사용하여 중복 파일을 찾을 수 있습니다.다음과 같은 내용이 있습니다.

cd /mnt/data 
find . -type f -exec bash -c "ls /mnt/backup/'{}' &> /dev/null && echo /mnt/backup/'{}'" \; 

두 경로 모두 동일한 경로에있는 파일을 에코합니다. 인쇄 된 경로는 백업 디렉토리에있는 파일에 있습니다. echorm -f으로 변경하여 파일을 제거 할 수 있지만주의해야합니다.

+0

이것은 아주 작은 명령입니다. 도와 줘서 고마워. 필자는 여러 개의 하위 디렉토리에 대해 테스트를 거쳤습니다. 중복 된 서브 디렉토리가 있음을 알았고 발견했습니다. 이것을 수동으로 확인할 수 있었기 때문에 매우 신뢰할 수있었습니다. – nicorellius

3

새로운 bash 스크립트를 작성하는 대신 rsync 스크립트를 수정하여이 문제를 해결해야합니다.

소스가 깨끗하고 백업 대상이 엉망인 경우 "rsync"인수 목록에 "--delete"를 추가하여 대상을 쉽게 정리할 수 있습니다. 이 플래그는 rsync에게 소스에없는 대상의 모든 디렉토리를 삭제하도록 rsync에 지시합니다.

+0

감사합니다. 이것은 좋은 생각이며, 나는 너무 오랜 시간이 걸리고 다음날의 활동과 충돌 할 수있는 많은 데이터가 있지만, 어떤 형태로 그것을 사용할 수 있을지도 모릅니다. 그리고 일반적으로, 나는 원하지 않습니다. '--delete'를 사용하십시오. 중요한 데이터를 훼손하고 싶지 않기 때문입니다. 목적지에서 삭제하지 않는 이유가 있습니다. – nicorellius

관련 문제