Dropbox 폴더에 파일이로드 될 때 inotifywait를 사용하여 파일 이동 사실 이상을 얻을

CentOS의 보관함에 나타나는 즉시 다른 폴더로 파일을 이동하는 방법을 찾으려고합니다.

나는 단서를 찾기 위해 인터넷을 닦았지만 inotify파일이 나타날 때 파일을 처리하는 스크립트를 호출하는 데 사용해야한다는 사실 이상을 얻을 수는 없습니다 .

내 BASH 지식은 매우 제한되어 있으며 PHP로 작성할 수 있을지 의심됩니다.

즉, inotify?를 사용하여 표시되는 즉시 다른 폴더로 파일을 어떻게 이동할 수 있습니까?



답변

이것은 간단한 접근법입니다.

#!/usr/bin/env bash

dir=/home/ortix/Dropbox/new/
target=/home/ortix/movedfiles/

inotifywait -m "$dir" --format '%w%f' -e create |
    while read file; do
        mv "$file" "$target"
    done

이동하려는 파일 유형에 대한 자세한 내용으로 검사, 로깅 등을 추가 할 수 있습니다.


답변

이 명령 inotifywait은 지정된 디렉토리의 내용이 변경 될 때마다 메시지를 인쇄합니다. 파일을 만들 때가 아니라 Dropbox에서 다운로드를 마치면 올바른 이벤트를 선택해야합니다. Dropbox의 작동 방식을 정확히 모르겠습니다. 최종 위치에서 파일에 쓰면 close_write이벤트를 청취하십시오 . 파일에 임시 위치에 기록한 다음 제 위치로 이동하면 moved_to이벤트를 수신하십시오 . 이벤트 수신 대기 (기본적으로 다음 이벤트 만 대기)하고 관련 메시지 만 인쇄하도록 옵션 -m -qinotifywait전달하십시오.

cd ~/Dropbox/myfolder
inotifywait -m -q -e close_write --format %f . | while IFS= read -r file; do
  cp -p "$file" /path/to/other/directory
done