2013-10-31 1 views
0

원격 호스트에 매일 rsync를 통해 수천 개의 파일과 520GB의 데이터를 동기화하는 폴더가 있습니다. 이 과정은 보통 약 5 시간이 걸립니다. 또한 rsync가 수행하는 두 가지 트리를 비교하지 않고 새로운 파일과 변경된 파일을 원격 위치에 복사하는 것이 좋습니다. 대상에있는 사람들이 새 파일에 액세스해야하기 때문에 scp하지만 지금까지 만난 두 가지 문제를 해결하는 방법을 모르겠습니다. 예, 저는 배쉬를 시작하는 초보자입니다. :)새 파일을 FIND & SCP (또는 더 나은 방법으로 제안)로 원격 호스트에 복사

find folder/-type f -mmin -60 -print0 -exec scp "/ rootfolder1/subfolder1/{}" "user @ host : /는 각 시간마다 실행하고 싶습니다. rootfolder2/subfolder2/{} "\;

내가 겪고있는 문제는 다음과 같습니다. scp에 전달 된 문자열에 공백이 있으면 작동하지 않고 "scp 모호한 대상"오류가 발생합니다. 분명히 scp는 백래시로 이스케이프 된 공백을 필요로하지만 그 방법으로 경로를 출력하도록 지시하는 방법을 모르거나 다음과 같이 SED 명령을 삽입하는 방법을 알고 있습니다. sed 's/// g' .

다른 점은 복사 할 파일이 대상 scp에없는 폴더에있는 경우에도 오류가 발생한다는 것입니다. 그래서 모든 파일을 복사하려고 시도하기 전에 "mkdir -p"를 시도해야하는지 (mkdir -p는 원격 호스트에서 작동 함) 또는 scp가 누락 된 폴더를 작성하도록하는 방법이 있는지 알지 못합니다.

물론 더 나은 해결책을 제안 할 수 있다면 꼭 !! 감사합니다.

답변

0

이것은 아마도 약간 과잉이지만, 파일을 만든 후 또는 변경 한 후 최대한 빨리 복사하려면 inotify를 살펴보십시오.

inotify는 디렉토리를보고 변경 사항이 발생할 때 알려줍니다.

볼 : http://linux.die.net/man/7/inotify

당신이 C에 적합 내가 당신을 위해 약간의 예를 uplaoded하는 경우 :

inotify and bash :

http://pastebin.com/1AUW7fs3

또는 당신은 bash는 표정으로 고수하려는 경우

0

for 루프에서이 모든 것을 래핑 할 수 있습니다.

for find/fOLDER-type f -mmin -60`에 i를 입력하십시오. scp "$ i"user @ host : "$ i"; done

여기에 나와있는 예는 찾으려는 파일을 다른 서버의 같은 이름의 폴더에 복사합니다. 변수 ($ i)를 둘러싼 큰 따옴표는 공백에 도움이됩니다.

cronjob으로 실행하면 원하는 결과를 얻을 수 있습니다. 나는 신중한 태도를 취할 것입니다. 그러나 경쟁 조건에 처하게 될 수도 있습니다. 경쟁 조건으로 인해 첫 번째 작업이 끝나기 전에 두 번째 복사 절차를 실행하게됩니다.

처음 실행하기 전에 'time'명령을 실행하면 cronjob 윈도우의 비트 수 감각을 얻을 수 있습니다. 희망이 도움이됩니다.