답변1
사용을 고려해야 합니다.inotifywait
, 예를 들어:
inotifywait -m /path -e create -e moved_to |
while read dir action file; do
echo "The file '$file' appeared in directory '$dir' via '$action'"
# do something with the file
done
우분투 inotifywait
에서는inotify-tools
팩.
버전 3.13(현재 Ubuntu 12.04)부터 inotifywait
옵션이 없는 파일 이름이 포함됩니다 -f
. 이전 버전에서는 강제 실행이 필요할 수 있습니다.
-e
선택은 이벤트 inotifywait
필터링을 수행하는 가장 좋은 방법입니다. 또한 read
명령을 사용하면 사용하거나 무시하도록 선택할 수 있는 여러 변수에 위치 출력을 할당할 수 있습니다. 출력을 전처리하기 위해 grep/sed/awk를 사용할 필요가 없습니다.
답변2
방금 이 작업을 수행했는데 검사 사이에 파일이 손실될 가능성이 약간 있다는 것 외에는 큰 문제를 발견하지 못했습니다.
while true
do
touch ./lastwatch
sleep 10
find /YOUR/WATCH/PATH -cnewer ./lastwatch -exec SOMECOMMAND {} \;
done
파일을 처리하는 데 너무 오랜 시간이 걸리지 않는다면 새 파일을 놓치지 마세요. 활동의 배경을 설정할 수도 있습니다... 방탄은 아니지만 inotify와 같은 외부 도구 없이도 일부 목적을 달성할 수 있습니다.
답변3
나는 선호한다incron
, 관리하기가 더 쉽기 때문입니다. 기본적으로 이는 활용되는 서비스이며 inotify
파일 변경 작업에 따라 조치를 취하도록 구성을 설정할 수 있습니다.
전임자:
<directory> <file change mask> <command or action> options
/var/www/html IN_CREATE /root/scripts/backup.sh
여기에서 전체 예를 볼 수 있습니다. http://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/
답변4
새 파일을 감지하려면 해당 파일을 처리하고 최종적으로 사용할 수 있는 처리된 파일을 삭제하세요.시스템 경로. 이 방법은 inotify를 기반으로 합니다. DirectoryNotEmpty 옵션이 있으므로 systemd는 디렉토리에서 파일을 감지할 때 항상 스크립트를 실행할 수 있습니다. 후속 파일을 삭제할 수 있고 스크립트가 디렉토리를 비워둔 경우에만 작동한다는 점을 기억해야 합니다.
먼저 mymonitor.service 파일을 준비하세요
[Unit]
Description=Start the script
[Service]
Type=oneshot
ExecStart=/path/to/your/script
다음으로 mymonitor.path로 이동하여 경로를 정의하세요.
[Unit]
Description= Triggers the service
[Path]
DirectoryNotEmpty=/path/to/monitor
[Install]
WantedBy=multi-user.target
.path 파일의 이름이 서비스 이름과 동일한 경우 .path 파일에 서비스 이름을 지정할 필요가 없습니다.
그것은 기반으로합니다바보들을 위한 파일 액세스 모니터링