有没有简单的方法可以在每次更改特定文件夹中的文件时自动运行(终端)命令?
应该可以通过命令行或系统内置应用程序来实现,而不能通过第三方应用程序来实现。
有任何想法吗?
有没有简单的方法可以在每次更改特定文件夹中的文件时自动运行(终端)命令?
应该可以通过命令行或系统内置应用程序来实现,而不能通过第三方应用程序来实现。
有任何想法吗?
Answers:
将这样的属性列表另存为~/Library/LaunchAgents/test.plist
:
<?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>test</string>
<key>ProgramArguments</key>
<array>
<string>say</string>
<string>yy</string>
</array>
<key>WatchPaths</key>
<array>
<string>~/Desktop/</string>
</array>
</dict>
</plist>
可以使用代理程序加载该代理程序,也可以launchctl load ~/Library/LaunchAgents/test.plist
通过注销并重新登录来加载该代理程序。应用更改需要卸载并加载plist。
~/
波形扩展()默认在WatchPaths中工作。EnableGlobbing为ProgramArguments添加了通配符和波浪号扩展,但是它不影响Program或WatchPaths。
如果在上次调用后的十秒钟内修改了监视的文件,则会在system.log中添加如下消息:
com.apple.launchd.peruser.501[146]: (test) Throttling respawn: Will start in 7 seconds
消除消息的一种方法是在sleep 10
脚本末尾添加类似内容。将ThrottleInterval设置为10并没有帮助。
未检测到监视文件夹的子文件夹中的更改。
请参阅man launchd
和man launchd.plist
了解更多信息。
文件夹操作适合在添加或修改文件时触发。
但是,如果您对更改的定义包括删除文件,则OSX文件夹操作不会检测文件是否已删除。
要回答这个问题:
从此处下载FileWatcher依赖项:https : //github.com/eonist/swift-utils
熟悉自己的自我,并在以下命令行运行swift:http ://krakendev.io/blog/scripting-in-swift
使用此代码监视文件夹。
码:
var fileWatcher = FileWatcher(["~/Desktop/test/".tildePath])/*<---the fileWatcher instance must be scoped to your class*/
fileWatcher!.event = { event in
Swift.print(self?.someVariable)//Outputs: a variable in your current class
Swift.print(event.description)//Outputs: a description of the file change
}
Automator具有一种称为“文件夹操作”的工作流,当将某些内容添加到文件夹时,该工作流将自动运行。创建一个,然后使用操作“运行Shell脚本”。
您可能想要尝试这样的事情:
touch /tmp/dirb.tmp
while true do
ls /thedirtocheck > /tmp/dira.tmp
diff /tmp/dira.tmp /tmp/dirb.tmp || echo "something changed"
cp /tmp/dira.tmp /tmp/dirb.tmp
sleep 100
done
ls -l
需要捕获文件更改。