Created
December 8, 2013 16:06
-
-
Save knightli/7859539 to your computer and use it in GitHub Desktop.
前两天下载东西时写的一段shell脚本, 可以监控下载文件大小变化, 当文件达到指定大小后, 倒计时30s自动关机.
执行环境: mac osx(其实linux下改改最后的关机脚本就能用起来, 最后关机的命令略有不同而已) @todo: 改成通用版本, 通过命令行参数获取filename和max
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # | |
| # 功能: 监控文件名包含FILENAME的文件大小变化, 当大于指定MAX大小时, 自动倒计时WAIT秒, 然后关机 | |
| # | |
| # todo: | |
| # 1) 现在代码写的很定制化, 后续要改成从参数中读取FILENAME, MAX和WAIT | |
| # 2) 后续可考虑配置文件作为输入, 可指定多个文件列表及max值, 主逻辑可改为全部下载完成后触发关机 | |
| # 文件名 | |
| FILENAME="cn_windows_8_1_pro_vl_x64_dvd_2971907.iso" | |
| # 下载文件的目标大小 | |
| # 注: chrome下载时,可以用开发者工具在下载页断点打在Downloads.prototype.updated = function(download) {...} 这个函数里,然后观察download对象的total属性即可) | |
| MAX=4032598016 | |
| # 取size | |
| # 必须用grep的方式, 因为不同下载软件, 可能会加不同的后缀, 比如chrome会加crdownload | |
| SIZE=`ls -la | grep $FILENAME | awk -F ' ' '{print $5}'` | |
| echo "watch file [$FILENAME] ..." | |
| echo | |
| echo "current filesize: $SIZE" | |
| echo "total filesize:$MAX" | |
| echo "begin to watch..." | |
| echo | |
| echo | |
| # 每秒钟查看一下最近一次获取的文件大小, 若还没下完, 就每秒循环跑这段逻辑 | |
| while [ $SIZE -lt $MAX ] | |
| do | |
| SIZE=`ls -la | grep $FILENAME | awk -F ' ' '{print $5}'` | |
| echo `awk -v x=$SIZE -v y=$MAX 'BEGIN {printf "SIZE:%d,%.2f%%",x,x*100/y}'` | |
| sleep 1 | |
| done | |
| # 上面的循环跑出来了, 说明文件大小已经达到MAX | |
| echo "reach max size" | |
| # 等待WAIT设定的秒数后触发关机 | |
| WAIT=30 | |
| while [ $WAIT -gt 0 ] | |
| do | |
| echo "wait $WAIT s to shutdown..." | |
| WAIT=$[WAIT-1] | |
| sleep 1 | |
| done | |
| # 关机 | |
| echo "shutdown!" | |
| # 这里使用的是在osx平台上较推荐的做法: 用apple script通知finder执行关机操作 | |
| osascript -e 'tell application "Finder" to shut down' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment