2012-04-15 3 views
6

파일을 특정 디렉토리로 이동하자마자 실행하려는 비디오 인코딩 스크립트가 있습니다.완료되면 파일을 다른 디렉토리로 이동합니다.

내가 inotify와 같은 것을 사용하는 경우, 파일이 움직일 때까지 파일이 인코딩되지 않도록하려면 어떻게해야합니까?

내가 같은 일을 생각했습니다

  • 복사 (rsync를) 임시 디렉토리에 파일을.
  • 일단 끝나면 (간단히 'mv') encode 디렉토리로 이동하십시오.
  • 내 스크립트가 encode 디렉토리를 모니터링하도록하십시오.

그러나 2 단계가 제대로 작동하고 1 단계 만 완료되면 어떻게 완료됩니까?

우분투 서버 11.10을 사용하고 있는데 bash를 사용하고 싶습니다. 문제가 간단하면 파이썬을 사용하도록 설득 할 수 있습니다.

본인은이 디렉토리에 파일을 "다운로드하지"않습니다. 오히려 나는 대다수의 시간 동안 rsync를 사용할 것이다.

또한이 우분투 서버는 VM에서 실행됩니다.

나는 NFS를 통해 FreeBSD 서버에 마운트 된 나의 메인 파일 저장소를 가지고있다.

답변

1

내가 사용하는 하나의 기술은 FTP에서 작동합니다. 파일을 보조 디렉토리로 전송하기 위해 FTP 서 v에 명령을 _ 행합니다. 일단 명령이 완료되면 서버에 두 번째 명령을 보냅니다. 이번에는 aux 디렉토리에서 최종 대상 디렉토리로 파일 이름을 변경하라는 메시지가 나타납니다. 디렉토리를 폴링하거나 inotify를 사용하는 경우 파일 이름이 나타나지 않습니다 이름 바꾸기가 완료 될 때까지 파일이 완전하다는 보장이 주어집니다.

저는 rsync에 익숙하지 않아 이름 바꾸기 기능이 유사한 지 잘 모릅니다.

+0

rsync는 이와 동일한 방식으로 작동합니다. 전송이 완료 될 때까지 인코딩 할 파일 목록에 파일이 표시되지 않습니다. – javanix

2

가장 쉬운 방법은 파일 다운로드가 완료 될 때까지 종료되지 않는 wget 또는 curl과 같은 프로그램을 사용하여 다운로드하는 것입니다. 그 실패, 그것은 절대 최고의 솔루션입니다 있는지 확실하지 않습니다,하지만 당신은 파일이 lsofgrep를 사용하여 열려 있는지 여부를 확인, 루프 스크립트 사용할 수 있습니다

while lsof | grep /path/to/download >/dev/null; do sleep 5; done 
mv /path/to/download /path/to/encode/dir 
+0

이것은 꼬집음에서 작동해야하지만 가능한 모든 경우 폴링을 피하고 싶습니다. – javanix

0

inotifywait이 유망 보인다합니다. 통지가 설정되기 전에 다운로드가 완료되면 영원히 기다릴 것이기 때문에 다소주의해야합니다.

inotifywait -e close_write "$download_file" 
mv "$download_file" "$new_location" 
관련 문제