감시 디렉토리 스크립트 도움말

감시 디렉토리 스크립트 도움말

먼저, 저는 스크립트 작성이 처음이지만 손을 더럽히는 것도 괜찮을 만큼 우분투를 다루는 방법을 잘 알고 있습니다.

간단한 디렉토리 감시를 수행하고 디렉토리에서 새 파일을 찾으면 해당 파일을 다른 디렉토리에 복사하는 작은 스크립트가 있습니다. 내가 사용하는 스크립트는 다음과 같습니다.

#!/bin/sh
#
sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Complete/ /media/complete/

동안 [ 1 ]
하다
  echo '감시 디렉터리: '$WATCHED_DIR '새 파일용'
  while file=$(inotifywait -q -e create "$WATCHED_DIR" --format "%f")
  하다
    echo 'moonback에 업로드할 새 파일' $file
    inform-send -i "gtk-go-up" "폴더 모니터 전체" "$file 파일 업로드 중"

    #rsync는 여기로 갑니다
    sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Complete/ /media/complete/

    inform-send -i "gtk-home" "전체 폴더 모니터" "파일이 업로드되었습니다."
  완료
완료

여기에서 찾은 스크립트를 수정한 것입니다.http://www.webupd8.org/2010/11/script-to-watch-folder-and-upload-new.html

스크립트에 관해 몇 가지 질문이 있습니다. 우선...이것이 내가 하려는 일을 수행하는 가장 좋은 방법입니까? 내가 말했듯이 잘 작동하지만 나는 항상 새로운 아이디어에 열려 있습니다. 참고: 대상 디렉터리는 Windows 7 시스템의 SMB 공유입니다.

둘째...시작 시 이 스크립트를 실행하는 가장 좋은 방법은 무엇입니까? 지금은 "시작 응용 프로그램" 화면으로 가서 "gnome-terminal -e /script.sh" 줄을 실행하는 새 레코드를 추가했습니다. 작동하지만 이상적으로 보이지는 않습니다. init.d 폴더에 스크립트를 추가하고 update-rc.d를 실행하고 /etc/rc.local에 스크립트를 추가하려고 시도했지만 둘 다 작동하지 않았습니다(오류는 없었지만 스크립트가 실행되지 않았습니다. 재부팅).

마지막으로...소스에서 삭제될 때 대상에서도 삭제되도록 이 스크립트를 수정하는 방법이 있습니까? 스크립트는 파일이 삭제되지 않고 추가될 때만 실행되며, rsync 부분은 소스에서 삭제될 때 대상에서 삭제되지만 새 파일이 추가될 때까지는 이를 수행하지 않습니다. (해당 단락이 의미가 있기를 바랍니다.)

답변1

귀하의 질문에 대해 ...

  1. 이것은 합리적으로 잘 작동합니다. 화려하게 꾸미고 싶다면 살펴보세요가족.
  2. /etc/rc.local배포판의 표준 방법에 따라 적절한 초기화 스크립트 의 끝에 추가하거나 생성하십시오.
  3. 옵션은 --delete이미 rsync그렇게 해야 합니다.

답변2

나는 다음과 같이 할 것입니다 :

cd directory2watch
# watching SUBdirectories
inotifywait --monitor --recursive *|
        while read path action file
        do
                # To get an idea of possible actions that will be
                # reported:
                echo path=$path action=$action file=$file
                # Decide on a followup base on $action:
                case $action in
                  "DELETE") ...
                          ;;
                  "CLOSE_WRITE,CLOSE")
                          ...
                          ;;
                esac

        done

관련 정보