"stat"을 사용하여 새 파일을 검색한 다음 다른 디렉터리로 이동하려면 어떻게 해야 합니까?

"stat"을 사용하여 새 파일을 검색한 다음 다른 디렉터리로 이동하려면 어떻게 해야 합니까?

궁극적으로 나는 새 백업 파일이 디렉터리에 배치되었음을 감지한 다음 다른 작업을 위해 해당 새 파일을 다른 위치로 이동하고 싶습니다.

이는 서버에 로그인한 사람이 없을 때 작동해야 하며 작업을 시작하는 데 사용하는 스크립트는 crontab 항목에 의해 트리거됩니다.

나는 다음과 같이 "inotifywait"를 사용해 보았습니다.

dir=/home/userid/drop/
target=/home/userid/current/

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

이는 터미널 창 세션이 열려 있는 경우에만 작동합니다. crontab 항목을 사용하여 이 scipt를 무인으로 시작하려고 하면 inotifywait 명령이 무시됩니다.

그래서 "entr"을 사용해 보았는데 같은 문제가 발견되었습니다. 터미널 창이 열려 있는 경우에만 작동합니다. entr을 사용하여 스크립트를 생성하고 crontab 항목을 사용하여 무인 실행하면 inotifywait 예제처럼 무시됩니다.

그래서 저는 이것이 "stat"를 사용하여 수행될 수 있다는 것을 알고 있으며 많은 예를 살펴보고 제 목적에 맞게 알아내려고 노력했지만 그 구문을 이해하지 못합니다.

stat가 디렉터리에 새 파일이 있는지 감지할 수 있다는 것을 알고 있지만 새 파일을 다른 위치로 이동하기 위해 mv(move) 명령 실행을 트리거하기 위해 결과를 처리하는 방법을 모르겠습니다.

이를 수행할 수 있는 통계 구문이 있으면 이를 영구적으로 실행해야 합니다. 어쩌면 15초마다 한 번씩만 확인하는 것일 수도 있지만 항상 파일을 이동할 준비가 되어 있어야 합니다.

누구든지 이 작업을 수행한 경험이 있고 다른 명령을 실행하기 위해 stat 연결 구문에 대해 도움을 줄 수 있다면 감사하겠습니다. 나는 다른 두 가지 솔루션을 위해 모든 사람이 SSH 퍼티 창을 연중무휴 24시간 열어두는 것을 상상할 수 없기 때문에 다른 사람들도 이 작업을 수행하는 방법을 알고 싶어할 것이라고 믿습니다.

미리 감사드립니다.

버크맨

답변1

당신이 필요로하는 것은 입니다 incron. incronUbuntu/Debian이 있는 경우 먼저 패키지를 설치하십시오.

sudo apt install incron

또는 Red Hat/Fedora 명령을 사용하십시오:

sudo yum install incron

즐겨 사용하는 텍스트 편집기에서 파일을 열고 /etc/incron.allow다음과 같이 만드세요 vim.

vim /etc/incron.allow

bob그가 사용할 수 있도록 사용자 이름을 새 줄에 추가하세요( 이라고 가정 ) incron.

bob

incron그런 다음 규칙 편집기를 엽니다 .

incrontab -e

그리고 다음 줄을 추가하세요:

/home/userid/drop/ IN_CREATE mv /home/userid/drop/$# /home/userid/current/

어디에 새로 삭제된 감지된 백업 파일의 이름을 나타내는 내장된 와일드카드가 $#있습니다 .incronincron

생성된 규칙을 테스트하려면 디렉터리에 파일을 추가 하고 삭제된 파일이 해당 디렉터리 /home/userid/drop/로 이동되었는지 확인하세요 . /home/userid/current/또한 시스템 로그를 확인하십시오.

tail /var/log/syslog

답변2

정기적인 cron작업은 가끔씩만 실행되기 때문에 부적절하지만, inode 변경에 반응하는 프로세스는 항상 실행되어야 합니다. @reboot(희망적으로) 영원히 실행될 작업을 시작하는 것만으로도 충분합니다.

$ crontab -l
@reboot /home/jhqdoe/job
$ cat job
#!/bin/sh
dir=/home/jhqdoe/drop/
target=/home/jhqdoe/current/
inotifywait -m "$dir" --format '%w%f' -e create \
| while read file; do mv -- "$file" "$target"; done
$ sudo reboot

가능하다면 init 시스템에서 관리하는 시작 데몬을 사용하는 것이 더 나은 선택일 수 있습니다. 이러한 데몬은 여러 가지 이유로 작업이 실패한 경우 다시 시작하기가 더 쉽기 때문입니다.

관련 정보