Mac에 "watch"또는 "inotifywait"와 같은 명령이 있습니까?
Mac (Snow Leopard)에서 폴더를보고 나서 스크립트를 실행합니다 (폴더로 이동 한 파일 이름 (매개 변수 ... x.sh "filename")).
bash (x.sh)로 작성된 스크립트를 사용하여 입력 파일 1 달러에 일부 파일 및 기타 항목을 옮길 수 있습니다. 새 파일 / 폴더가 dir로 이동 / 생성 될 때 파일 이름을 지정하려면 OSX가 필요합니다.
그런 명령이 있습니까?
fswatch
fswatch 는 Mac OS X FSEvents API를 사용하여 디렉토리를 모니터링하는 작은 프로그램입니다. 해당 디렉토리 변경에 대한 이벤트가 수신되면 지정된 쉘 명령이 다음과 같이 실행됩니다./bin/bash
GNU / Linux를 사용하는 경우, inotifywatch ( inotify-tools
대부분의 배포판 에서 패키지의 일부 )는 비슷한 기능을 제공합니다.
업데이트 : fswatch
이제 BSD, Debian 및 Windows를 포함한 많은 플랫폼에서 사용할 수 있습니다.
구문 / 간단한 예
버전 1.x 이상에서 여러 경로를 볼 수있는 새로운 방법 :
fswatch -o ~/path/to/watch | xargs -n1 -I{} ~/script/to/run/when/files/change.sh
참고 :에 의해 출력 되지 않은 경우에 의해 출력 된 숫자
-o
는xargs
명령 끝에 추가됩니다-I{}
. 해당 번호를 사용하기로 선택한 경우{}
명령의 아무 곳에 나 배치 하십시오.
버전 0.x 의 이전 방법 :
fswatch ~/path/to/watch ~/script/to/run/when/files/change.sh
Homebrew를 사용한 설치
13/12/13 현재 홈 브루 에 다시 추가되었습니다 . 따라서 수식 목록 ( brew update
)을 업데이트 하면 다음과 같이하면됩니다.
brew install fswatch
Homebrew없이 설치
이 명령을 입력하십시오 Terminal.app
cd /tmp
git clone https://github.com/alandipert/fswatch
cd fswatch/
make
cp fswatch /usr/local/bin/fswatch
c
시스템에 컴파일러 가없는 경우 Xcode 또는 Xcode 명령 행 도구를 모두 설치해야합니다 (둘 다 무료). 그러나이 경우 homebrew를 확인하십시오 .
fswatch
버전 1.x에 대한 추가 옵션
Usage:
fswatch [OPTION] ... path ...
Options:
-0, --print0 Use the ASCII NUL character (0) as line separator.
-1, --one-event Exit fsw after the first set of events is received.
-e, --exclude=REGEX Exclude paths matching REGEX.
-E, --extended Use exended regular expressions.
-f, --format-time Print the event time using the specified format.
-h, --help Show this message.
-i, --insensitive Use case insensitive regular expressions.
-k, --kqueue Use the kqueue monitor.
-l, --latency=DOUBLE Set the latency.
-L, --follow-links Follow symbolic links.
-n, --numeric Print a numeric event mask.
-o, --one-per-batch Print a single message with the number of change events.
in the current batch.
-p, --poll Use the poll monitor.
-r, --recursive Recurse subdirectories.
-t, --timestamp Print the event timestamp.
-u, --utc-time Print the event time as UTC time.
-v, --verbose Print verbose output.
-x, --event-flags Print the event flags.
See the man page for more information.
그 목적으로 launchd 를 사용할 수 있습니다 . 파일 경로가 수정 될 때 자동으로 프로그램을 시작하도록 Launchd를 구성 할 수 있습니다.
예를 들어 다음과 같이 실행 된 구성 plist는 /usr/bin/logger
사용자 계정의 데스크탑 폴더가 수정 될 때 프로그램을 시작합니다 .
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>logger</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/logger</string>
<string>path modified</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Users/sakra/Desktop/</string>
</array>
</dict>
</plist>
구성 plist를 활성화하려면 라이브러리 폴더의 LaunchAgents 폴더에 "logger.plist"로 저장하십시오.
쉘에서 다음 명령 launchctl
을 사용하여 logger.plist를 활성화 할 수 있습니다 .
$ launchctl load ~/Library/LaunchAgents/logger.plist
데스크탑 폴더가 모니터되고 있습니다. 변경 될 때마다 system.log에 출력이 표시됩니다 (Console.app 사용). logger.plist를 비활성화하려면 다음을 실행하십시오.
$ launchctl unload ~/Library/LaunchAgents/logger.plist
위의 구성 파일은 WatchPaths
옵션을 사용합니다 . 또는 QueueDirectories
옵션 을 사용할 수도 있습니다 . 자세한 내용은 시작된 매뉴얼 페이지를 참조하십시오.
Homebrew를 통해 사용 가능한 Facebook의 파수꾼 도 멋지게 보입니다. 필터링도 지원합니다.
이 두 줄은 소스 디렉토리에서 감시를 설정 한 다음 CSS 파일이 변경 될 때마다 "minify-css"라는 도구를 실행하는 "buildme"라는 트리거를 설정합니다. 이 도구에는 변경된 파일 이름 목록이 전달됩니다.
$ watchman watch ~/src
$ watchman -- trigger ~/src buildme '*.css' -- minify-css
경로는 절대적이어야합니다.
내 작은 도구를 살펴보고 확장하고 싶을 수도 있습니다 kqwait
. 현재는 단일 파일에서 쓰기 이벤트를 기다리는 중이지만 kqueue 아키텍처는 계층 적 이벤트 스태킹을 허용합니다 ...
watchdog 은 파일 / 디렉토리를 감시하기위한 크로스 플랫폼 파이썬 API이며, 이벤트가 발생할 때 (새로 추가 된 파일, 제거 된 파일 및 변경된 파일을 포함하여) 조치 (쉘 명령 포함)를 트리거 할 수있는 "트릭"도구가 내장되어 있습니다.
이것은 파일이 변경 될 때 임의의 명령을 실행하는 OSX의 대안으로 entr 을 언급 한 것입니다. 나는 그것이 간단하고 유용하다는 것을 알았습니다.
편집 : fsw
에 병합되었습니다 fswatch
. 이 답변에서에 대한 참조 fsw
는 이제이어야합니다 fswatch
.
나는 fswatch
C ++로 fsw
몇 가지 개선 된 기능을 갖춘 대체물을 작성했습니다 .
지원되는 모든 플랫폼 (OS X v.> = 10.6)에서 빌드하는 GNU 빌드 시스템 프로젝트입니다.
./configure && make && sudo make install
여러 경로를 다른 인수로 전달할 수 있습니다.
fsw file-0 ... file-n
다음과 같은 모든 이벤트 정보가 포함 된 자세한 레코드를 덤프합니다.
Sat Feb 15 00:53:45 2014 - /path/to/file:inodeMetaMod modified isFile
출력을 구문 분석하기 쉽기 때문에
fsw
출력을 다른 프로세스로 파이프 할 수 있습니다.- 지연 시간은로 사용자 지정할 수 있습니다
-l, --latency
. - 로 문자형 문자 대신 숫자 형 이벤트 플래그를 작성할 수 있습니다
-n, --numeric
. strftime
형식 문자열을 사용하여 시간 형식을 사용자 지정할 수 있습니다-t, --time-format
.- 시간은 머신 의 로컬 시간 (기본적으로)이거나 UTC 시간을 사용 하여 지정할 수 있습니다
-u, --utc-time
.
fsw 받기 :
fsw
되어 GitHub의에서 호스팅 하고 저장소를 복제 얻을 수 있습니다 :
git clone https://github.com/emcrisostomo/fsw
fsw 설치 :
fsw
다음 명령을 사용하여 설치할 수 있습니다.
./configure && make && sudo make install
추가 정보 :
또한 작동 방식 에 대한 몇 가지 예를 찾을 수 있는 소개 블로그 게시물을 작성했습니다 fsw
.
$ while true; do kqwait doc/my_file.md; make; done
Apple OSX 폴더 동작을 사용하면 폴더 에서 수행 한 동작을 기반으로 작업을 자동화 할 수 있습니다.
내 fswatch 포크는 구문 분석 친화적 인 출력 inotifywait -m
으로 약간 적은 기능을 제공합니다 (기다리지 않아도됩니다! Linux에서 더 많은 문제가 있습니다 inotifywait
...).
원본을 개선 한 fswatch
것입니다. 포크 된 프로그램을 제공하지 않고 STDOUT을 통해 변경된 파일의 실제 경로를 전송하기 때문입니다.
내가 물건을 자동화하는 데 사용하는 일련의 무서운 bash 스크립트의 기초로 견고했습니다.
inotifywait
반면에 Linux에서는 ( 주제 에 맞지 않습니다. ) 리눅스 위에 많은 kludges가 필요하며 여전히 그것을 관리하는 좋은 방법을 찾지 못했습니다 node.js
.
나는 이것에 대한 GIST를 가지고 있으며 사용법은 매우 간단합니다.
watchfiles <cmd> <paths...>
예를 들어, 다음 명령은 OR이 변경 Hello World
될 때마다 에코 됩니다 . 기본 간격 확인은 1 초입니다.file1
file2
watchfiles 'echo Hello World' /path/to/file1 /path/to/file2
5 초마다 확인하려면 -t
플래그를 사용할 수 있습니다
watchfiles -t 'echo Hello World' /path/to/file1 /path/to/file2
-v
verbose
디버그 정보를 보여주는 모드를 활성화합니다-q
차종이watchfiles
실행 조용히 (#
사용자가 프로그램이 실행되는 볼 수 있도록 표시 될 것이다)-qq
차종은watchfiles
완전히 조용히 실행-h
도움말과 사용법을 보여줍니다
https://gist.github.com/thiagoh/5d8f53bfb64985b94e5bc8b3844dba55
macOS 에서이 작업을 마쳤습니다. 나는 이것이 여러면에서 끔찍하다고 확신합니다.
#!/bin/sh
# watchAndRun
if [ $# -ne 2 ]; then
echo "Use like this:"
echo " $0 filename-to-watch command-to-run"
exit 1
fi
if which fswatch >/dev/null; then
echo "Watching $1 and will run $2"
while true; do fswatch --one-event $1 >/dev/null && $2; done
else
echo "You might need to run: brew install fswatch"
fi
watch
3 초마다 명령을 실행하려는 명령 이없는 사용자를위한 간단한 단일 행 대안은 다음과 같습니다 .
while :; do your-command; sleep 3; done
기본적으로 다음을 수행하는 것과 동일한 무한 루프입니다.
watch -n3 your-command
참고 URL : https://stackoverflow.com/questions/1515730/is-there-a-command-like-watch-or-inotifywait-on-the-mac
'Programing' 카테고리의 다른 글
텍스트 영역의 줄 바꿈 (0) | 2020.03.31 |
---|---|
안드로이드에서 토스트의 위치를 바꾸는 방법? (0) | 2020.03.31 |
SQL 조인 : 일대 다 관계에서 마지막 레코드 선택 (0) | 2020.03.31 |
JavaScript의 "elseif"구문 (0) | 2020.03.31 |
Groovy 문자열을 int로 (0) | 2020.03.31 |