什么是你为日常生活写的最有用的脚本?
只是想知道这里的人们写了些什么样的脚本/程序来帮助他们的日常生活(又不是工作相关的)。
任何事情都是开创性的。 对于我来说,这是一个小的Python脚本来计算跑步的速度给定的距离和时间stream逝。
我的钥匙掉在我的笔记本电脑上。 所以我编写了一个程序,将200 MS内的两个“0”按键replace为0,两个“0”按键在700 MS内相互replace为0,忽略其余部分; 所以我可以使用我的笔记本电脑之前,我去replace键盘。
哇; 我不知道这会如此受欢迎:p
至于如何 – 微软公开了一个很好的小function叫做“钩子”。
http://msdn.microsoft.com/en-us/library/ms644959(VS.85).aspx#wh_keyboard_llhook
使用该钩子; 我能写一个“filter”,做我所需要做的(提示:如果你返回1与callback窗口将不会处理按键)。
我之所以知道这其实并不是因为我正在写一个键盘logging器,而是因为我刚刚写了一个程序笑脸给Synergy 。
是的。 我没有编写另一个程序,用随机字母数字键交换字母数字键,是的; 这真的很有趣:D
我再也没有这个代码,但是可能我写的最有用的脚本就是VBA中的信不信由你了。 我有一个恼人的同事,他有一个这么短的导火索,我把他称为“樱桃炸弹”。 当客户打来电话时,他会经常生气,然后站起来,开始在房间的墙壁上咆哮,杀死我的生产力和士气。
我总是打开Microsoft Excel。 当他这样做的时候,我会selectExcel,并且在工具栏上有一个带有樱桃炸弹图像的新图标。 我会谨慎地点击那个…什么都不会发生。
然而,不久之后,我会接到一个电话,会说“是的,是的,这听起来不错,我最好看一看”。 然后,我会起床,向樱桃炸弹道歉,然后走开。
发生了什么是我们使用NetWare,它有一个原始的消息传递系统内置英寸当我点击button,一个小的VBA脚本会发送一个NetWare消息给我的朋友,告诉他们,樱桃炸弹再次在它,他们会请给我打电话。 他从来没有想过它:)
一个bash脚本被调用,所以如果我在/a/very/deeply/nested/path/somewhere
,我想去“up” N目录,我可以inputup N
:
#!/bin/bash LIMIT=$1 P=$PWD for ((i=1; i <= LIMIT; i++)) do P=$P/.. done cd $P
例如:
/a/very/deeply/nested/path/somewhere> up 4 /a/very>
NB由gmatt:
通过将以下内容放到你的bashrc中,可以扩展到后面的function:
function up( ) { LIMIT=$1 P=$PWD for ((i=1; i <= LIMIT; i++)) do P=$P/.. done cd $P export MPWD=$P } function back( ) { LIMIT=$1 P=$MPWD for ((i=1; i <= LIMIT; i++)) do P=${P%/..} done cd $P export MPWD=$P }
超远程重置button。
一个超级特殊的模拟硬件架(支持VME包装箱的房间比你的GPU还要less),世界另一端的用户在凌晨就会崩溃。 花了一个小时才能进入实验室并通过安全措施。
但是我们不允许连接到超级特殊控制器或修改硬件。 解决scheme是使用爱普生点阵式打印机的老式DEC工作站,在送纸旋钮上粘贴塑料尺,将打印机放置在复位button附近。
以常规用户身份loginWS(不允许root用户,所有外部端口都被locking),用24blank线打印一个文档 – 旋转送纸旋钮和标尺按压超级特殊硬件的复位。
在Windows XP上,我已经设置了一个AT作业,每天在C:\中运行这个命令。
dir /s /b * > dirlist.txt
这列出了C驱动器上所有文件的完整path。 然后,每当我需要find一个文件,我可以使用findstr
。 这使用Windows资源pipe理器search,因为它允许在整个path上的正则expression式匹配。 例如:
findstr ".jpg" dirlist.txt findstr /i /r "windows.*system32.*png$" dirlist.txt
这是一个非常快速的解决scheme,而且如果你发现自己有一个新的Windows安装,没有互联网连接,这是一个很好的解决scheme。
如果您需要在特定文件types内search某种模式,请首先列出您需要检查的所有文件,然后在其中search。 例如,要find翻转图像的Java或Python程序,可以这样做:
findstr "\.java \.py" dirlist.txt > narrowlist.txt findstr /i /r /f:narrowlist.txt "flip.*image"
我有一个Python脚本,当我插入数码相机时会自动运行。
它将所有照片从相机上的卡上复制,备份,然后上传到Flickr。
上传到Flickr片段来自uploadr.py (我不能赞赏)。
这里是卸载相机的Python代码。 它通过SRCDIRrecursion,并在将图像复制到DESTDIR之前用date和时间命名每个图像。
#!/usr/bin/python import os import string import time import shutil ################################################### __SRCDIR__ = "/mnt/camera" __DESTDIR__ = "/home/pictures/recent" ################################################### def cbwalk(arg, dirname, names): sdatetime = time.strftime("%y%m%d%H%M") for name in names: if string.lower(name[-3:]) in ("jpg", "mov"): srcfile = "%s/%s" % (dirname, name) destfile = "%s/%s_%s" % (__DESTDIR__, sdatetime, name) print destfile shutil.copyfile( srcfile, destfile) ################################################### if __name__ == "__main__": os.path.walk(__SRCDIR__, cbwalk, None)
几年前,我在win32 api的帮助下写了一个winforms应用程序,把我自己的电脑完全locking了一个小时,这样就迫使我去锻炼。 因为我懒惰? 不,因为我有个人健身的目标。 有时你只需要一点点就可以开始:)
我的.cmd备份脚本。 它每天晚上在我的服务器上运行,并根据星期几命名备份文件。 整整一周的备份已经救了我(和我的家人)多次:
::备份参数: :: / Vvalidation? (是/否) :: / R限制对所有者的访问? (是/否) :: / RS可移动存储? (是/否) :: / HC硬件压缩(开/关) :: / M备份types(正常/复制/差异/增量/每日) :: / L日志文件types(f / s / n) :: / D“描述” :: / J“作业名称” :: / F“文件名” SETLOCAL ::确保networking驱动器已安装 CALL C:\ bat \ configs \ MapShares-home.cmd 回声 今天设置=%date:〜0.3% 如果%今天%==周一昨天= 0日 如果%今天%==星期二设置昨天= 1天 如果%今天%==星期三设置昨天= 2星期二 如果%今天%==星期四设定昨天= 3星期三 如果%今天%==星期五设定昨天= 4星期四 如果%今天%==星期六设置昨天= 5Friday 如果%今天%==太阳集昨天= 6星期四 设置configsDir =%〜dp0 设置storePath = C:\ mybackups ::(例如:星期一C文件) 设置title =%昨天%备份集 echo%DATE%%TIME%%title%>“%storePath%\%昨天%_backup.log” 调用BackupConfigs.bat ::创build新的BKF文件 调用C:\ WINDOWS \ system32 \ ntbackup.exe备份^ “@%configsDir%\ daily.bks”^ / V:是/ R:否/ RS:否/ HC:关/ M正常/ L:s ^ / D“%title%”^ / J“%title%.job”^ / F“%storePath%\%yesterday%.bkf”^ >>“%storePath%\%昨天%_backup.log” echo%DATE%%TIME%已完成>>“%storePath%\%昨天%_backup.log” 复制“%storePath%\%yesterday%.bkf”“V:\ Backups \ NEPTUNE” CALL C:\ bat \ clean-temps.bat defrag -v C:>“%storePath%\%昨天%_defrag.log” ::显示备份目录 开始/ D“C:\ bat \ Backups \”checkbkf.bat ENDLOCAL ::暂停
“backup.sh”,将目录的内容encryption并将其发送到我的Gmail帐户。
我是一名私人飞行员。 我写了几个脚本,从aviationweather.gov获取当地机场的天气信息。 对于“今天是飞行的好日子”这个问题,他们能够快速回答这个问题。
我写了一个Python脚本,去看所有的networking漫画,并下载任何新的漫画。 我每天只运行一次,不需要单独访问每个站点,只需访问/漫画/文件夹。 ;)
一个Greasemonkey脚本,从游戏网站Kotaku.com中删除显然愚蠢的[*]评论 。
正如常见的拼写错误,大写字母写作,过度使用“大声笑”以及类似的启发式一样。
一个线程的HTML刮板,从一个很难使用的站点下载所有可用的系列/电影的字幕(在search后你必须点击4次才能到达下载页面,只是为了显示更多的广告)。 现在我只是把search标准和新闻下载。
我写了一个脚本,最终每天在我的团队中使用。 当我以前为英特尔工作时,我们有一个应用程序与访问数据库交谈,以获取寄存器信息的转储(我正在validation芯片组)。 它将从SQL查询中获取这些信息并将其转储到CSV文件,HTML文件和Excel文件中。 整个过程花了近2个小时。 不是开玩笑。 不知道为什么花了这么长时间。 我们会在午饭前一小时开始,去吃午饭,然后回来。
我认为必须有一个更好的方法来做到这一点。 我与维护registry数据库的团队交谈,并从中获得SQL代码。 然后,我写了一个perl脚本来抓取数据并将其输出为CSV,HTML和Excel格式。 运行? 大约1-2秒。 一个伟大的速度提高。
2006年我在伊拉克部署时,我还写了几个脚本(我在国民警卫队担任了9年 – 12月份出来)。 我们使用了这个在ADA中编写的名为ULLS-G(单元级物stream系统 – 地面)的旧应用程序,最初在DOS上运行。 他们已经足以将其运行在Windows XP的命令行解释器中。 这个系统没有鼠标接口。 一切都是通过键盘,它没有批处理function。 那么假设你想打印所有车辆操作员的许可证? 那么……我们单位有150名士兵,所以花了很长时间。 假设每个人都有资格获得一辆新车,并且希望将其添加到每个人的操作员资格中? 你必须一个接一个地做。
我能够findSAGE数据库的ODBC驱动程序(使用了什么ULLS-G),所以我编写了能够与SAGE数据库交谈的perl脚本。 所以花了一个多小时,现在只花了几秒钟。 我也用我的脚本和驱动程序进行报告。 我们必须每天早上向营报告所有信息。 其他单位每天早上会手写信息。 我掀起了一个Excelmacros,谈到使用相同的驱动程序,并与SAGE数据库交谈,并更新Excel电子表格。 这是我写过的最复杂, 唯一的 Excelmacros。 它因为授予我军队奖章而获得了回报。 所以是的,我在军方写了一个perl脚本的奖章:)有多less人可以这么说呢? ;)
一个Perl脚本,通过选定的类别将我的本地Craigslist抓到一个SQL DB中,然后我可以查询它。
这个V2用定时器更新数据库,并且在任何查询中都有匹配的时候提醒我,基本上为我提供了CL的后台代理。
别名dir ='ls -al'是我最喜欢的最喜欢的脚本。
批量文件通过拖放进行重命名。
天之前,我做了一个小的VBScript接受RegEx并相应地replace文件名。 你只需要在上面放一堆文件或文件夹。 我发现这些年来非常有用。
gist.github.com/15824 (当心,这些评论是德语的)
从几个月前在我的博客上发布的这个消息,已经从我认为很酷的想法变成了我最近记忆中最好的一个小窍门。 我在这里引用它:
==================
我花了很多时间在bash。 对于外行来说,bash是你可以在大多数unix机器上find的系统,谢天谢地,还有一些windows和Mac。 乍一看,这只不过是一个命令行界面,所以大多数用户看不到他们宁愿遗忘的时代错误。
我在bash中几乎做了所有事情。 我从一个命令行阅读我的电子邮件,这就是为什么我避开标记的电子邮件。 我浏览目录,编辑文件,参与我的日常源代码签出和交付,search文件,search文件,重新启动我的机器,甚至偶尔从命令行浏览网页。 bash是我数字化存在的心脏和灵魂。
麻烦的是,我倾向于一次打开大约6个bash窗口。 在今天的工作中,我有一个运行Web服务器,另一个摆弄我的数据库,第三,第四和第五个编辑不同的文件,而第六个磨削通过我的机器试图logging系统上的每个文件的名称。 为什么? 因为如果你想知道在哪里通过文件名find一个对象,能够search这样一个存档是很方便的。
当你这样做的时候,你的控制条中会出现许多窗口,名字就是“bash”。 如果你只有其中一个,那就没有问题,但是当你有6个或更多……还有其他二十多个事情时,这是很痛苦的。 在一个键盘/鼠标对的同时命令下,我有三个显示器,我仍然觉得需要更多。 每个窗口都有几个打开的terminal。
所以我把这一切都放在一起。 首先,将这些行放在.bash_profile中:
export PROMPT_COMMAND='export TRIM=`~/bin/trim.pl`' export PS1="\[\e]0;\$TRIM\a\]\$TRIM> " trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG
我写了几十段关于这一切是如何运作的,以及为什么它是按照这样的方式build立起来的,但是你并没有真正感兴趣。 相信我。 为什么我在第三行上做了“CMD = ...
; echo …”这本书的整个章节。 许多人(包括我的其他域名所在的bluehost)仍然在使用旧版本的bash,它在处理陷阱方面存在重大错误,所以我们坚持这样做。 你可以删除CMD,并用$ BASH_COMMANDreplace它,如果你现在在你的bash版本上,并且想做研究。
无论如何,我使用的第一个脚本是在这里。 它会创build一个很好的提示,其中包含您的计算机名称和目录,并将其切割为合理的长度:
============trim.pl=========== #!/usr/bin/perl #It seems that my cygwin box doesn't have HOSTNAME available in the #environment - at least not to scripts - so I'm getting it elsewhere. open (IN, "/usr/bin/hostname|"); $hostname = <IN>; close (IN); $hostname =~ /^([A-Za-z0-9-]*)/; $host_short = $1; $preamble = "..." if (length($ENV{"PWD"})>37); $ENV{"PWD"} =~ /(.{1,37}$)/; $path_short = $1; print "$host_short: $preamble$path_short"; ==============================
在这篇博客文章的顶部有一个警告,你应该在开始提出一些愚蠢的问题之前阅读:“为什么不通过@ENV使用HOSTNAME环境variables? 简单:因为这不适用于我试过的所有系统。
现在真的很酷的一点。 记住.bash_profile添加的第3行?
trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG
它将trim.pl脚本输出转储到同一个容器中,同时打印到命令提示符和窗口标题,但这次是添加刚input的命令! 这就是为什么你不想在你的.bashrc中做所有的事情:你运行的任何脚本(在我的机器上,man是其中之一)将在每一行触发这个事情。 男人的输出受到我们在这里所做的事情的严重影响。 我们对terminal不太满意。
为了抓住你刚input的命令,我们把bash的历史logging下来,
===========hist.pl============ #!/usr/bin/perl while (<STDIN>) { $line = $_ } chomp $line; $line =~ /^.{27}(.*)/; print $1; ==============================
所以现在,我有一个bazillion的窗户,他们说的事情是这样的:
castro: /home/ronb blog Ron-D630: /C/ronb/rails/depot script/server Ron-D630: /C/ronb/rails/depot mysql -u ron -p Ron-D630: /C/ronb/rails/depot find . > /C/ronb/system.map Ron-D630: /C/ronb/rails/depot vi app/views/cart.html.erb Ron-D630: /C/perforce/depot/ p4 protect Ron-D630: /C/perforce/depot/ p4 sync -f Ron-D630: /C/perforce/depot/
从屏幕底部的快乐小酒吧,我现在可以分辨出是哪一个。 而且因为我们已经设置了PS1,只要一个命令执行完毕,命令名就会被trim.pl的输出再次取代。
更新(同一天):这东西(.bash_profile条目),当我在我的.bashrc中尝试它的时候,把所有的地狱放在我身上。 无论何时调用bash作为语言,您的.bashrc都是由非交互式脚本执行的。 当我试图使用男人时,我打了这个。 各种各样的垃圾(我的.bashrc的完整文本,以及转义字符)出现在手册页的顶部。 一旦你把所有的东西放在一起,我会build议在命令行中用一个快速的“man man”调用来testing这个gem。
我想是时候把我的.bashrc中的自定义垃圾拉出来放在它所在的位置。
事实上,在这个过程中,我发现自己在这个时候打了一个“男人陷阱”。
#! /bin/bash # check to see if site is up # if it is, don't worry # if it's down, restart apache after get a process listing # # v.1 Warren M Myers - initial stab # 31 Aug 06 # ERRCOD='7' WHEN=`date +%d%b%y` REPT="~/psaux.$WHEN.txt" STARS='********************' curl -I http://www.shodor.org > /var/tmp/curlret.txt if [ "$?" = "$ERRCOD" ]; then # return was unable to connect to host: save ps -aux; mail report ps -aux > $REPT echo $STARS echo 'curl return results' echo cat curlret.txt echo echo $STARS echo 'ps -aux results' cat $REPT echo echo $STARS echo 'restarting apache' /etc/init.d/apache2 restart echo 'apache restarted' echo echo "ps -aux results saved in $REPT" fi rm -f /var/tmp/curlret.txt
Greasemonkey脚本添加一个“按下button很多”控制框到在线游戏。
一个快速且肮脏的Python脚本,每5秒钟查找一次google.com的DNS,如果成功则发出一次提示,如果失败,则发出两次提示。
我写这个时候,我不得不忍受一个高度脆弱的家庭networking。 它让我立即知道networking的状态,即使我正在房间的桌子下面,双手放满了网线和手电筒在我的嘴里。
我曾经在一个技术夏令营工作,我们不得不在周末的时候为每个小组的孩子们撰写这些文章,然后他们将这些文章作为信物收回。 通常情况下,这些包括一堆通用的句子和一到两个个性化的句子。 我编写了一个python脚本,它可以从一组固定句子中构造出一个这样的书写,并允许用户在中间添加一些个性化的句子。 这为我和其他辅导员节省了大量的时间,我放开了这个秘密。 即使这么多是自动化的,我们的文章仍然比许多“诚实”的文章好看,因为我们可以把更多的时间放在个性化的部分。
在我以前的工作地点办公时间是荒谬的。 这是一家软件公司,我的老板被吸引了。 他会在下午5点半左右给我们工作(正好到了回家的时候),让我们完成工作,直到晚上11点(远远超过我们理想的工作时间)。 或者他会发现代码中仍然在进行中的令人讨厌的问题。
所以我做了一个batch file和一个脚本,可以在下午7点到晚上8点之间随机closures我的电脑 。 它有一个1分钟的计时器,以防万一我会留下几个小时,需要中止closures过程。
但是我会在下午5点之前离开我的办公桌,所以如果他想在结帐时间丢垃圾,他就不能find我。 如果他来到我的办公桌前看我的电脑,他会认为我还在厨房或附近的迷你厨房里拿些薯条什么的。 但是如果在那段时间关机,他会打我的手机,告诉我回到办公室。
我还计划在我的机器上使用BIOS,以便在上午8:00或上午9:00 打开机器 ,以防我感到懒惰,并想在上午10:00或上午11:00左右漫步。 如果我被抓到我的桌子上,他会问“你早上在哪里?” 我会说:“我正在和营销团队见面。” 或者“我出去吃早饭了”。
哑狗
一个小脚本,监视一些热门网站的广告匹配我的技能,并给我发电子邮件。
我使用这个自动加载function。 我只需input“mycd”,就会出现一个我经常光顾的目录列表。 如果我碰巧知道数字,我可以只是说一些像“mycd 2”。 要添加一个目录到列表中,只需input“mycd / tmp / foo / somedirectory”。
function mycd { MYCD=/tmp/mycd.txt touch ${MYCD} typeset -ix typeset -i ITEM_NO typeset -ii x=0 if [[ -n "${1}" ]]; then if [[ -d "${1}" ]]; then print "${1}" >> ${MYCD} sort -u ${MYCD} > ${MYCD}.tmp mv ${MYCD}.tmp ${MYCD} FOLDER=${1} else i=${1} FOLDER=$(sed -n "${i}p" ${MYCD}) fi fi if [[ -z "${1}" ]]; then print "" cat ${MYCD} | while read f; do x=$(expr ${x} + 1) print "${x}. ${f}" done print "\nSelect #" read ITEM_NO FOLDER=$(sed -n "${ITEM_NO}p" ${MYCD}) fi if [[ -d "${FOLDER}" ]]; then cd ${FOLDER} fi }
使用rsync执行循环备份的shell脚本。 它还支持执行任意子程序来支持其他预备活动(例如下载美味的书签)。
我喜欢根据照片的拍摄date将照片存储在目录中。 因此,我编写了一个程序,可以扫描存储卡中的照片,根据照片的date在我的硬盘上创build任何文件夹,然后将其复制进去。
“networking启动”和“净停止”命令的各种快捷方式,所以我可以启动和停止服务,而不必进入服务MMC
每个“X”ms点击(或双击)“Y”的小应用程序。 在核电站工作不再需要那只饮水鸟! ;)
MySQL备份。 我制作了一个Windows批处理脚本,它将创buildMySQL数据库的增量备份,每天创build一个全新的转储,并在远程服务器上每10分钟备份一次。 它无数次地拯救了我的屁股,特别是在无数客户会打电话的情况下,大喊大叫地从数据库中“消失”了一个logging。 我去了“没问题,让我们看看发生了什么”,因为我还写了一个二进制search脚本,它将查找数据库中存在logging的最后一刻。 从那里可以很容易地理解谁“偷”了它,为什么。
你不会想象这些东西有多么有用,而且我已经使用它们将近5年了。 我不会因为他们经过粗略的testing而改用别的东西,他们是自定义的,这意味着他们只是做我所需要的东西,除此之外,我已经调整了太多,以至于增加额外的东西function。
所以,我的“杰作”是Windows的MySQL增量备份+远程备份+日志search系统。 我也为Linux写了一个版本,但是我在某处丢失了它,可能是因为它只有15行+一个cron作业,而不是Windows大约1200行+两个计划任务。