나는 이 대답 을 보았다 .
예를 들어, inotifywait 사용을 고려해야합니다.
inotifywait -m /path -e create -e moved_to | while read path action file; do echo "The file '$file' appeared in directory '$path' via '$action'" # do something with the file done
내 질문은 위의 스크립트는 모든 유형의 파일 생성을위한 디렉토리를 감시하지만 inotifywait
특정 유형 / 확장자의 파일이 생성되거나 디렉토리로 이동할 때만보고 하도록 명령을 수정하는 방법입니다. .xml
파일이 생성 되면보고 합니다.
내가 시도한 것 :
inotifywait --help
명령 을 실행했으며 명령 행 옵션을 읽었습니다. 그것은이 --exclude <pattern>
와 --excludei <pattern>
명령 배제 (정규식을 사용하여) 특정 유형의 파일을,하지만 난 방법이 필요 단지 INCLUDE 특정 유형 / 확장자의 파일을.
답변
특정 유형 / 확장 파일이 생성 된 경우에만보고하도록 inotifywait 명령을 수정하는 방법
제발 참고이인지 검증되지 않은 코드 나에 액세스 할 수 없기 때문에 inotify
지금은. 그러나 이것과 비슷한 것이 작동해야합니다.
inotifywait -m /path -e create -e moved_to |
while read path action file; do
if [[ "$file" =~ .*xml$ ]]; then # Does the file end with .xml?
echo "xml file" # If so, do your thing here!
fi
done
답변
이중 부정을 사용하십시오.
inotifywait -m --exclude "[^j][^s]$" /path -e create -e moved_to |
while read path action file; do
echo "The file '$file' appeared in directory '$path' via '$action'"
done
여기에는 자바 스크립트 파일 만 포함됩니다
답변
이전 답변 의 이중 부정 접근 방식은 (TMG가 지적했듯이) 실제로 필터링 작업을으로 변경하기 때문에 좋은 생각 inotifywait
이지만 올바른 것은 아닙니다.
에 파일 끝 예를 들어, as
다음이 일치하지 않습니다 [^j][^s]$
마지막 문자가 있기 때문에 s
일치하지 않는 [^s]
, 따라서는 제외되지 않습니다.
부울 용어에서 if S
는 다음과 같습니다.
“마지막 편지는
s
“
그리고 J
진술입니다 :
“두 번째 문자는
j
“
다음의 값 --exclude
매개 변수는 의미를 동일시해야 not(J and S)
의한하는 데 모건의 법칙 이다 not(J) or not(S)
.
또 다른 잠재적 인 문제는 in zsh
에 $path
해당하는 배열을 나타내는 내장 변수 $PATH
이므로 while read path ...
행이 완전히 엉망 $PATH
이되어 셸에서 모든 것이 실행 불가능하게됩니다.
따라서 올바른 접근 방식은 다음과 같습니다.
inotifywait -m --exclude "[^j].$|[^s]$" /path -e create -e moved_to |
while read dir action file; do
echo "The file '$file' appeared in directory '$dir' via '$action'"
done
일치가 두 번째 위치에 적용되고 POSIX 확장 정규식을 취하기 때문에 위에서 언급 한 부울 OR을 나타내는 문자가 이스케이프되어서는 안된다는 것을 확인한 .
후에 필요한 사항을 참고 하십시오 .[^j]
|
--exclude