2013-01-02 9 views
2

저는 한 번에 여러 기가 바이트 파일을 전송할 수있는 로컬 디렉토리에 원격 디렉토리를 효율적으로 미러링해야하는 lftp 스크립트를 작성했습니다.lftp 내 기준을 충족시키지 않는 디렉토리를 미러링합니다.

요구 사항 중 하나는 로컬 사용자가 더 이상 필요하지 않을 때 로컬 파일을 삭제할 수 있으며이 스크립트를 실행하는 "로컬"컴퓨터가 여러 대 있으므로 원격 파일을 삭제하지 않을 때까지 삭제하지 않을 것입니다. 나는 그것을 필요로하는 모든 사람들을 알고있다. 따라서 스크립트는 --newer-than 플래그를 사용하여 lftp 스크립트가 마지막으로 로컬에서 실행 된 이후 원격 서버에서 새로 작성되거나 수정 된 파일 만 미러링합니다.

다음은 스크립트의 중요한 비트의 다음 EOF가 bash는 스크립트의 실제 끝이 아니다는 것을

lftp -u $login,$pass $host << EOF 
set ftp:ssl-allow yes 
set ftp:ssl-protect-data yes 
set ftp:ssl-protect-list yes 
set ftp:ssl-force yes 
set mirror:use-pget-n 5 

mirror -X * -I share*/* --newer-than=/local/file/last.run --continue --parallel=5 $remote_dir $local_dir 

quit 
EOF 

참고.

공유/디렉토리의 내용 (last.run 파일의 타임 스탬프보다 NEWER 인 공유/디렉토리 자체 포함)을 제외한 $ remote_dir의 모든 항목을 제외합니다.

내가 주에있는 다른 특별히 지정된 디렉토리가 있다고 가정 한 경우를 제외하고 예상대로이 작동

이/그래서 주/shareWHATEVER/stuff.txt이 존재

shareWHATEVER/

했다.

shareWHATEVER/stuff.txt가 처음 실행될 때 로컬로 원격 복사되며 모두 정상입니다.

stuff.txt를 포함하여 전체적으로 shareWHATEVER 디렉토리를 삭제하면 다음 번에 스크립트가 실행될 때 원격 서버에서 타임 스탬프가 변경되지 않았더라도 stuff.txt는 미러링되지 않지만 shareWHATEVER는 그대로 유지됩니다 .

그래서 로컬에서는 share/shareWHATEVER/디렉토리가 비어있는 것처럼 보입니다.

왜 shareWHATEVER가 자체 타임 스탬프 나 파일의 타임 스탬프도 내 로컬 확인보다 많지 않은데도 복사되는 이유는 무엇입니까?

감사합니다.

답변

0

파일 복사가없는 경우에도 디렉토리를 만드는 것만으로도 lftp이 작동합니다 (mirror 옵션 --no-empty-dirs은이 동작을 변경하지 않음).

lftp mailing list에서 이에 대해 논의 할 수 있습니다.