你为日常生活写的最有用的剧本是什么?

只是想知道这里的人们都写了些什么小脚本/程序来帮助他或她的日常生活(也就是说与工作无关)。

任何事都可以,不管是不是开创性的。现在对我来说,这是一个小型的 Python 脚本,用于计算给定距离和时间的跑步速度。

122642 次浏览

Alias dir = ‘ ls-al’ 是我最喜欢的脚本。

我的。Cmd 备份脚本。它每晚在我的服务器上运行,并根据工作日命名备份文件。整整一周的备份让我(和我的家人)节省了很多时间:

:: Backup args:
::   /V Verify? (yes/no)
::   /R Restrict access to owner? (yes/no)
::   /RS Removable storage? (yes/no)
::   /HC Hardware compression (on/off)
::   /M Backup type (normal/copy/differential/incremental/daily)
::   /L Log file type (f/s/n)
::   /D "Description"
::   /J "Job-name"
::   /F "File-name"


SETLOCAL


:: ensure that network drives are mounted
CALL C:\bat\configs\MapShares-home.cmd
echo on


set today=%DATE:~0,3%
if %today%==Mon set yesterday=0Sunday
if %today%==Tue set yesterday=1Monday
if %today%==Wed set yesterday=2Tuesday
if %today%==Thu set yesterday=3Wednesday
if %today%==Fri set yesterday=4Thursday
if %today%==Sat set yesterday=5Friday
if %today%==Sun set yesterday=6Saturday


set configsDir=%~dp0
set storePath=C:\mybackups


:: (eg: Monday C files)
set title=%yesterday% backup set




echo %DATE% %TIME% %title% > "%storePath%\%yesterday%_backup.log"


CALL BackupConfigs.bat


:: Create new BKF file
call C:\WINDOWS\system32\ntbackup.exe backup ^
"@%configsDir%\daily.bks" ^
/V:yes /R:no /RS:no /HC:off /M normal /L:s ^
/D "%title%" ^
/J "%title%.job" ^
/F "%storePath%\%yesterday%.bkf" ^
>> "%storePath%\%yesterday%_backup.log"


echo %DATE% %TIME% Completed >> "%storePath%\%yesterday%_backup.log"


copy "%storePath%\%yesterday%.bkf" "V:\Backups\NEPTUNE"


CALL C:\bat\clean-temps.bat


defrag -v C: > "%storePath%\%yesterday%_defrag.log"


:: display backup directories
start /D"C:\bat\Backups\" checkbkf.bat


ENDLOCAL


::pause


一个小型任务栏程序,它从第三方 JavaDoc 中提取出每个错误代码常量,并让我查找给定错误代码的常量名。另外,添加任何从十六进制到十进制的转换等。

在调试器中工作时经常会出现这种情况——返回错误代码,但是追踪代码到文本是一个巨大的痛苦。在使用包装本机方法、操作系统调用或 COM 的软件时,这种情况更为常见... ... 通常,常量直接从错误头文件中复制出来,没有附加上下文、重复值和枚举。

一个线程化的 HTML 抓取器,从一个网站下载所有可用的系列/电影字幕,这是一个痛苦的使用(你必须在搜索后点击大约4次,才能到达下载页面,只是显示更多的广告)。现在我只需输入搜索条件,然后按下载键。

“ backup.sh”将目录中的内容编辑成标签并发送到我的 gmail 帐户。

我的 o键在我的笔记本电脑上掉下来了; 所以我写了一个程序,把200MS 内的两个 0键互相替换成 o键,把700MS 内的两个 0键互相替换成 0键,然后忽略其他键; 这样我就可以在更换键盘之前用我的笔记本电脑了。

哇,我不知道这会这么受欢迎

至于如何-微软公开了一个不错的小 API 功能称为 钩子

使用这个钩子; 我能够编写一个“过滤器”来完成我需要它做的事情(提示: 如果你返回1,你的回调窗口将不会处理按键)。

我知道这个的原因实际上不是因为我正在写一个键盘记录器-而是因为我写了一个程序微笑到 协同效应不久前。

是的。我确实写了另一个程序,用一个随机的字母数字键交换字母数字键,是的,这真的很有趣: D

#! /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

各种“网络启动”和“网络停止”命令的快捷方式,这样我就可以启动和停止服务,而不必进入服务 MMC

通过拖放大量文件重命名。

很久以前,我编写了一个小的 VBScript,它接受正则表达式并相应地替换文件名。您只需在其上放置一堆文件或文件夹即可。这些年来,我发现这是非常有用的。

Gist.github.com/15824 (注意,评论是用德语写的)

每个项目都有一个类似的 backup.sh,它只对源文件进行 tar 和 gzip 压缩,将其移动到一个快照目录中,并用时间戳标记它: project-mmddyy-hmmss。对于提交之间的编码非常有用。

我有一个版本控制脚本,它将一个目录作为参数, 并递归地将所有文件复制到. ./dirname/DATE/TIME/

显然,这是一种蹩脚的做事方式,但是在安装真正的版本控制包之前,它很方便。

使用 rsync 执行旋转备份的 shell 脚本。它还支持执行任意的子程序来支持其他预备份活动(例如,下载美味的书签)。

Http://gist.github.com/6806

名为 signIisSite _ ToAppPool. js

当您希望确保某些资源被正确映射时,这非常有用。

:)

SetAppPool("W3SVC/1059997624/Root", "MyAppPool");






function SetAppPool(webId, appPoolName)
{
var providerObj=GetObject("winmgmts:/root/MicrosoftIISv2");
var vdirObj=providerObj.get("IIsWebVirtualDirSetting='" + webId + "'");
vdirObj.AppPoolId=appPoolName;
vdirObj.Put_();
}

一个脚本,每小时运行,重新培训我的垃圾邮件过滤器基于两个 IMAP 文件夹,其中 span 和 ham 被放置。

#!/bin/sh
FNDIR="train-as-spam"
FPDIR="train-as-ham"


for dir in /home/*/.maildir
do
cd "${dir}"
USER=`stat -c %U .`


SRCDIR="${dir}/.${FNDIR}"
if [ ! -d ${SRCDIR} ]; then
echo no "${SRCDIR}" directory
else
cd "${SRCDIR}/cur"
ls -tr | while read file
do
if grep -q "^X-DSPAM" "${file}"; then
SOURCE="error"
else
SOURCE="corpus"
fi


dspam --user "${USER}" --class=spam --source="${SOURCE}" --deliver=innocent,spam --stdout < "${file}" > "../tmp/${file}"
mv "../tmp/${file}" "${dir}/new/${file%%:*}" && rm "${file}"
done
fi


SRCDIR="${dir}/.${FPDIR}"
if [ ! -d ${SRCDIR} ]; then
echo no "${SRCDIR}" directory
else
cd "${SRCDIR}/cur"
ls -tr | while read file
do
if grep -q "^X-DSPAM" "${file}"; then
SOURCE="error"
else
SOURCE="corpus"
fi


dspam --user "${USER}" --class=innocent --source="${SOURCE}" --deliver=innocent,spam --stdout < "${file}" > "../tmp/${file}"
mv "../tmp/${file}" "${dir}/new/${file%%:*}" && rm "${file}"
done
fi


done
#!/usr/bin/perl
use strict;
use utf8;
use Encode;
use File::Find;
binmode STDOUT, ':utf8';
sub orderly {
my ($x, $y) = @_{$a, $b};
if (my $z = $x <=> $y) {return $z}
$x = length $a;
$y = length $b;
my $z = $x < $y ? $x : $y;
if (substr($a, 0, $z) eq substr($b, 0, $z)) {
return $y <=> $x;
}
else {
return $a cmp $b;
}
}
my %conf = map +($_ => 0), split //, 'acsxL';
sub Stat {$conf{L} ? lstat : stat}
my @dirs = ();
while (defined ($_ = shift)) {
if ($_ eq "--") {push @dirs, @ARGV; last}
elsif (/^-(.*)$/s) {
for (split //, $1) {
if (!exists $conf{$_} or $conf{$_} = 1 and $conf{a} and $conf{s}) {
print STDERR "$0 [-a] [-c] [-s] [-x] [-L] [--] ...\n";
exit 1;
}
}
}
else {push @dirs, $_}
}
s/\/*$//s for @dirs;  # */ SO has crappy syntax highlighting
@dirs = qw(.) unless @dirs;
my %spec = (follow => $conf{L}, no_chdir => 1);
if ($conf{a}) {
$spec{wanted} = sub {
Stat;
my $s = -f _ ? -s _ : 0;
decode(utf8 => $File::Find::name) =~ /^\Q$dirs[0]\E\/?(.*)$/s;
my @a = split /\//, $1;
for (unshift @a, $dirs[0]; @a; pop @a) {
$_{join "/", @a} += $s;
}
};
}
elsif ($conf{s}) {
$spec{wanted} = sub {
Stat;
$_{$dirs[0]} += -f _ ? -s _ : 0;
};
}
else {
$spec{wanted} = sub {
Stat;
my $s = -f _ ? -s _ : 0;
decode(utf8 => $File::Find::name) =~ /^\Q$dirs[0]\E\/?(.*)$/s;
my @a = split /\//, $1;
! -d _ and pop @a;
for (unshift @a, $dirs[0]; @a; pop @a) {
$_{join "/", @a} += $s;
}
};
}
if ($conf{x}) {
$spec{preprocess} = sub {
my $dev = (Stat $File::Find::dir)[0];
grep {$dev == (Stat "$File::Find::dir/$_")[0]} @_;
};
}
while (@dirs) {
find(\%spec, $dirs[0] eq "" ? "/" : $dirs[0]);
$_{""} += $_{$dirs[0]} if $conf{c};
shift @dirs;
}
$_{$_} < 1024 ** 1 ? printf "%s «%-6.6sB» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 0), $_ :
$_{$_} < 1024 ** 2 ? printf "%s «%-6.6sK» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 1), $_ :
$_{$_} < 1024 ** 3 ? printf "%s «%-6.6sM» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 2), $_ :
$_{$_} < 1024 ** 4 ? printf "%s «%-6.6sG» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 3), $_ :
$_{$_} < 1024 ** 5 ? printf "%s «%-6.6sT» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 4), $_ :
$_{$_} < 1024 ** 6 ? printf "%s «%-6.6sP» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 5), $_ :
$_{$_} < 1024 ** 7 ? printf "%s «%-6.6sE» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 6), $_ :
$_{$_} < 1024 ** 8 ? printf "%s «%-6.6sZ» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 7), $_ :
printf "%s «%-6.6sY» %s\n", $_{$_}, sprintf("%6.6f", "$_{$_}" / 1024 ** 8), $_
for grep {$_{$_} > 0} sort orderly keys %_;

我把它保存在 ~/bin/dush中,它的作用类似于 du -h/du | sort -n的混合体: 排序 还有可以同时给出人类可读的大小。非常有用的查找是什么占用了磁盘空间。

同样的道理,

#!/usr/bin/perl
$t = 1;
%p = map {$_ => ($t *= 1024)} qw(K M G T P E Z Y);
$t = 4707319808;
if (@ARGV) {
if (($_ = shift) =~ /^-*dvd/i) {$t = 4707319808}
elsif (/^-*cd[^w]*$/i) {$t = 737280000}
elsif (/^-*cd/i) {$t = 681984000}
elsif (/^-*([\d.]+)([kmgtpezy])/i) {$t = $1 * ($p{"\U$2"} || 1)}
elsif (/^-*([\d.]+)/) {$t = $1}
else {unshift @ARGV, $_}
}
($q, $r, $s) = (0, ($ENV{COLUMNS} || 80) - 13, $t);
while (<>) {
chomp, stat;
unless (-e _) {
print STDERR "$_ does not exist\n";
next;
}
if (($s += -s _) > $t) {
$s && $s < $t && printf "-%7s %s\n",
sprintf("%2.3f%%", 100 * ($t - $s) / $t), $t - $s;
printf "-----------%d%*s\n", ++$q, $r, "-" x $r;
$s = -s _;
}
printf "%8s %s\n",
sprintf("%3.3f%%", $s * 100 / $t),
/.{4}(.{$r})$/s ? "...$1" : $_;
}
$s && $s < $t && printf "-%7s %s\n",
sprintf("%2.3f%%", 100 * ($t - $s) / $t), $t - $s;

我把它保存为 ~/bin/fit。当我归档一大堆文件时,我运行 ls | fitls | fit -cdrw来帮助确定它是否适合 DVD/CD/CDRW,以及如果不适合在哪里分割它们。

一个 Greasemonkey 脚本添加一个“按那个按钮很多”控制框到一个在线游戏。

我使用 Procmail将收到的电子邮件分类到不同的文件夹。因为我记不住 procmailrc 语法,所以我使用 M4作为预处理器。下面是 procmailrc 的开头(这还不是脚本) :

divert(-1)
changequote(<<, >>)
define(mailinglistrule,
<<:0:
* $2
Lists/$1
>>)
define(listdt, <<mailinglistrule($1,^Delivered-To:.*$2)>>)
define(listid, <<mailinglistrule($1,^List-Id:.*<$2>)>>)
divert# Generated from .procmailrc.m4 -- DO NOT EDIT

这为邮件列表定义了两个宏,例如 listdt (foo,foo@example.com)展开为

:0:
* ^Delivered-To:.*foo@example.com
Lists/foo

这意味着带有包含 foo@example.com 的 Delived-To 标题的电子邮件应该放在 Lists/foo 文件夹中。它还将处理过的文件排列为以注释开头,注释警告我不要直接编辑该文件。

现在,坦率地说,m4让我感到害怕: 如果我不小心重新定义了一个宏,然后 procmail 开始丢弃我所有的电子邮件,或者类似的东西怎么办?这就是为什么我有一个脚本,我称之为 update-procmailrc,它以 diff 格式向我显示 procmailrc 将如何更改。如果更改只有几行,并且看起来与我的预期大致相同,我可以很高兴地批准它,但是如果对文件进行了巨大的更改,我知道应该更仔细地查看我的编辑。

#! /bin/sh


PROCMAILRC=.procmailrc
TMPNAM=.procmailrc.tmp.$$
cd $HOME
umask 077
trap "rm -f $TMPNAM" 0


m4 < .procmailrc.m4 > $TMPNAM
diff -u $PROCMAILRC $TMPNAM


echo -n 'Is this acceptable? (y/N) '
read accept


if [ -z "$accept" ]; then
accept=n
fi


if [ $accept = 'y' -o $accept = 'Y' ]; then
mv -f $TMPNAM $PROCMAILRC && \
chmod 400 $PROCMAILRC && \
echo "Created new $PROCMAILRC"
if [ "$?" -ne 0 ]; then
echo "*** FAILED creating $PROCMAILRC"
fi
else
echo "Didn't update $PROCMAILRC"
fi

这个脚本还没有防止任何电子邮件灾难,但是它让我不那么担心修改 procmailrc。

我有一个 Python 脚本,当我插入数码相机时,它会自动运行。

它复制相机上卡片上的所有图片,备份,然后上传到 Flickr。


上传到 Flickr 的文章来自 上传(我不能把它归功于 上传)。

这是卸载摄像机的 Python 代码。它通过 SRCDIR 递归,并在将图像复制到 DESTDIR 之前用日期和时间为每个图像命名。

#!/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)

我是私人飞行员。我写了几个脚本,从 aviationweather.gov 中获取当地机场的天气信息。它们对于快速回答“今天适合飞行吗?”

读取当前目录中的配置文件、登录到 FTP 帐户并上传自上次运行以来已更改的所有文件的脚本。对于那些使用共享主机的客户来说真的很方便,FTP 是我访问文件的唯一选择。

Http://lucasoman.com/code/updater

我写了一个简单的 VB 应用程序,追踪我玩过并成功完成的 Freecell 游戏号码,并且总是用不同的种子启动它。

从一开始。

最大游戏号码是65K。可悲的是,5年多过去了,我仍然只有几百岁。但至少我知道我从来没有玩过同一只手两次!

* * Postscript-这是我写过的 只有 VB 应用程序。我尖叫着跑回 C + + ..。

我使用一个 DOS 程序,如果过了一定的日期就会出错。我只是查看了启动时使用的批处理文件,并对其进行了更改,以便首先将日期更改为2000,然后运行程序。在程序退出时,它将日期修改为修改前的样子。

我写了一个 cron 任务来获取我父亲的路由器的 IP 地址,并将其 ftp 到一个安全的位置,这样当他需要帮助时,我可以远程桌面和修复他的比赛。

超级遥控复位按钮。
一个 超级特别模拟硬件的架子(在过去,一个装满 VME 板条箱的房间比你的 GPU 还要差) ,世界另一端的用户会在凌晨崩溃。进入实验室和通过安检花了一个小时。

但是我们不允许连接到 超级特别控制器或修改硬件。解决方案是一个老的 DEC 工作站与爱普生点矩阵打印机,磁带塑料尺到纸张进料旋钮,定位打印机附近的复位按钮。
作为常规用户登录到 WS (不允许使用 root,所有外部端口都被锁定) ,打印一个带有24行空行的文档——这些空行旋转送纸旋钮,标尺按在 超级特别硬件上的重置上。

一个 perl 脚本,将我的本地 Craigslist,通过选择的类别,刮入一个 SQL 数据库,然后我可以查询。

这个版本的 V2使用一个计时器更新 DB,如果在任何查询上有匹配的查询,它会提醒我,基本上为 CL 提供了一个后台代理。

作为计划任务,从整个驱动器 d: 复制任何修改/新文件到备份驱动器 g: ,并记录复制的文件。它也能帮助我记住我什么时候做了什么。

Just date 是一个将日期和时间打印到屏幕上的小程序

克:

Cd 驱动器

丁:

CD

类型 g: back _ d. log > g: log back _ d. log

Echo = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > g: back _ d. log

D: mu bmutil just date > g: back _ d. log

Xcopy/s/d/y/c . g: drive _ d > g: back _ d. log

一个小应用程序,左键单击(或双击)每个“ X”毫秒为“ Y”的时间量。 再也不需要那只会喝酒的鸟在核电站工作了! ;)


对于那些不记得我们在 Unix 上的位置或者我们使用的 SID 的人来说。
把这个放到你的档案里。

<br>function CD
<br>{
<br>   unalias cd
<br>   command cd "$@" && PS1="\${ORACLE_SID}:$(hostname):$PWD> "
<br>   alias cd=CD
<br>}
<br>
alias cd=CD

我得到了一个脚本,提取的 id3标签编码的歌曲新的在一定格式,然后添加他们根据标签到我的音乐库。

300行的 python。主要是因为跛脚不能很好地处理标签。

在 Windows XP 上,我设置了一个 AT 作业,每天用 C 语言运行这个命令:

dir /s /b * > dirlist.txt

这列出了 C 盘上所有文件的完整路径。然后,每当我需要找到一个文件,我可以使用 findstr。这胜过使用文件资源管理器搜索,因为它允许在整个路径上进行正则表达式匹配。例如:

findstr ".jpg" dirlist.txt
findstr /i /r "windows.*system32.*png$" dirlist.txt

这是一个非常快速的解决方案设置,并伟大的,如果你发现自己与一个新的 Windows 安装和没有互联网连接。

如果您需要在某些文件类型中搜索某些模式,请首先列出所有需要检查的文件,然后在其中进行搜索。例如,要找到一个能够翻转图像的 Java 或 Python 程序,您可以这样做:

findstr "\.java \.py" dirlist.txt > narrowlist.txt
findstr /i /r /f:narrowlist.txt "flip.*image"

我编写了一个格式化 C 源文件的脚本,该脚本使用选项卡和空格字符的适当组合自动缩进代码,这样不管编辑器上的选项卡设置是什么,文件都会显示正确。

源代码是 给你

早在2005年,我就使用过 Gentoo Linux,我用了很多叫 genlop 的小程序来向我展示我在我的 Gentoo 机器上出现(安装)的东西的历史。为了简化我的工作,我编写的不是一个小的 python 脚本,而是一个大的,但那时我刚开始使用 python:

    #!/usr/bin/python
##############################################
# Gentoo emerge status              #
# This script requires genlop,           #
# you can install it using `emerge genlop`.  #
# Milot Shala <milot@mymyah.com>        #
##############################################


import sys
import os
import time


#colors
color={}
color["r"]="\x1b[31;01m"
color["g"]="\x1b[32;01m"
color["b"]="\x1b[34;01m"
color["0"]="\x1b[0m"




def r(txt):
return color["r"]+txt+color["0"]
def g(txt):
return color["g"]+txt+color["0"]
def b(txt):
return color["b"]+txt+color["0"]


# View Options
def view_opt():


print
print
print g("full-info - View full information for emerged package")
print g("cur - View current emerge")
print g("hist - View history of emerged packages by day")
print g("hist-all - View full list of history of emerged packages")
print g("rsync - View rsync history")
print g("time - View time for compiling a package")
print g("time-unmerged - View time of unmerged packages")
print
command = raw_input(r("Press Enter to return to main "))
if command == '':
c()
program()
else:
c()
program()


# system command 'clear'
def c():
os.system('clear')




# Base program
def program():
c()
print g("Gentoo emerge status script")
print ("---------------------------")
print


print ("1]") + g(" Enter options")
print ("2]") + g(" View options")
print ("3]") + g(" Exit")
print
command = input("[]> ")




if command == 1:
print
print r("""First of all  you must view options to know what to use, you can enter option name ( if you know any ) or type `view-opt` to view options.""")
print
time.sleep(2)
command = raw_input(b("Option name: "))
if (command == 'view-opt' or command == 'VIEW-OPT'):
view_opt()




elif command == 'full-info':
c()
print g("Full information for a single package")
print ("-------------------------------------")
print
print b("Enter package name")
command=raw_input("> ")
c()
print g("Full information for package"), b(command)
print ("-----------------------------------")
print
pack=['genlop -i '+command]
pack_=" ".join(pack)
os.system(pack_)
print
print r("Press Enter to return to main.")
command=raw_input()
if command == '':
c()
program()


else:
c()
program()




elif command == 'cur':
if command == 'cur':
c()
print g("Current emerge session(s)")
print ("-------------------------")
print
print b("Listing current emerge session(s)")
print
time.sleep(1)
os.system('genlop -c')
print
print r("Press Enter to return to main.")
command = raw_input()
if (command == ''):
c()
program()


else:
c()
program()




elif command == 'hist':
if command == 'hist':
c()
print g("History of merged packages")
print ("---------------------------")
print
time.sleep(1)
print b("Enter number of how many days ago you want to see the packages")
command = raw_input("> ")
c()
print g("Packages merged "+b(command)+ g(" day(s) before"))
print ("------------------------------------")
pkg=['genlop --list --date '+command+' days ago']
pkg_=" ".join(pkg)
os.system(pkg_)
print
print r("Press Enter to return to main.")
command = raw_input()
if command == '':
c()
program()


else:
c()
program()




elif command == 'hist-all':
c()
print g("Full history of merged individual packages")
print ("--------------------------------------")
print
print b("Do you want to view individual package?")
print r("YES/NO?")
command = raw_input("> ")
print
if (command == 'yes' or command == 'YES'):
print g("Enter package name")
command = raw_input("> ")
print
pkg=['genlop -l | grep '+command+ ' | less']
pkg_=" ".join(pkg)
os.system(pkg_)
print
print r("Press Enter to return to main")
command = raw_input()
if command == '':
c()
program()
else:
c()
program()


elif (command == 'no' or command == 'NO'):
pkg=['genlop -l | less']
pkg_=" ".join(pkg)
os.system(pkg_)
print
print r("Press Enter to return to main")
command = raw_input()
if command == '':
c()
program()


else:
c()
program()


else:
c()
program()




elif command == 'rsync':
print g("RSYNC updates")
print
print
print
print b("You can view rsynced time by year!")
print r("Do you want this script to do it for you? (yes/no)")
command = raw_input("> ")
if (command == 'yes' or command == 'YES'):
print
print g("Enter year i.e"), b("2005")
print
command = raw_input("> ")
rsync=['genlop -r | grep '+command+' | less']
rsync_=" ".join(rsync)
os.system(rsync_)
print
print r("Press Enter to return to main.")
c()
program()
elif (command == 'no' or command == 'NO'):
os.system('genlop -r | less')
print
print r("Press Enter to return to main.")
command = raw_input()
if command == '':
c()
program()


else:
c()
program()


elif command == 'time':
c()
print g("Time of package compilation")
print ("---------------------------")
print
print


print b("Enter package name")
pkg_name = raw_input("> ")
pkg=['emerge '+pkg_name+' -p | genlop -p | less']
pkg_=" ".join(pkg)
os.system(pkg_)
print
print r("Press Enter to return to main")
time.sleep(2)
command = raw_input()
if command == '':
c()
program()


else:
c()
program()




elif command == 'time-unmerged':
c()
print g("Show when package(s) is/when is unmerged")
print ("----------------------------------------")
print


print b("Enter package name: ")
name = raw_input("> ")
pkg=['genlop -u '+name]
pkg_=" ".join(pkg)
os.system(pkg_)
print
print r("Press Enter to return to main")
time.sleep(2)
command = raw_input()
if command == '':
c()
program()


else:
c()
program()


else:
print
print r("Wrong Selection!")
time.sleep(2)
c()
program()




elif command == 2:
view_opt()
command = raw_input(r("Press Enter to return to main "))
if command == '':
c()
program()
else:
c()
program()




elif command == 3:
print
print b("Thank you for using this script")
print
time.sleep(1)
sys.exit()


else:
print
print r("Wrong Selection!")
time.sleep(2)
c()
program()
command = ("")




program()

一个 python 脚本,它执行文件遍历并打印按磁盘使用情况排序的目录树。

最有用的? 但是有那么多..。

  1. D.cmd 包含:@dir/ad/on
  2. Cmd 包含:@dir/a-d/on
  3. Cmd 包含:@exit
  4. S.cmd 包含:@start。
  5. Cmd 包含:@start. & exit
  6. Cmd 包含以下内容,它允许我通过 RDP 正确地连接到另一台机器的控制台会话,而不管我是否在 Vista SP1上。

    @ Echo off

    找到“6.0.6001”

    如果错误级别0如果不是错误级别1(设置 TSCONS = admin) ELSE 设置 TSCONS = 控制台

    Echo 发出命令: mstsc/% TSCONS%/v% 1

    启动 mstsc/% TSCONS%/v% 1

(对于这种奇怪的格式,很抱歉,显然每个答案不能有多个代码样本?)

我将从命令提示符导航到我的 VS 解决方案文件所在的位置,然后我想打开它,但是我太懒了,没有键入 blah.sln 并按回车键。所以我写了 sln.cmd:

@echo off
if not exist *.sln goto csproj
for %%f in (*.sln) do start /max %%f
goto end


:csproj
for %%f in (*.csproj) do start /max %%f
goto end


:end

所以我只要输入 sln,然后按回车键,它就会在工作目录中打开解决方案文件(如果有的话)。我在 pd.cmd 和 pop.cmd 中包装了 pushd 和 popd。

几年前,我在一些 win32api 的帮助下编写了一个 winform 应用程序,把自己完全锁在电脑外一个小时,这样就可以迫使我去锻炼。因为我懒吗?不... 因为我有个人健身目标。有时候你只需要一点点的刺激就可以开始了:)

一个来自游戏网站 Kotaku.com 的 Greasemonkey 脚本。

通过常见的拼写错误、大写字母书写、过度使用“ LOL”和类似的启发式方法来识别[ * ]。

动画 CRC32校验和:

#!/usr/bin/python


import sys, re, zlib


c_null="^[[00;00m"
c_red="^[[31;01m"
c_green="^[[32;01m"


def crc_checksum(filename):
filedata = open(filename, "rb").read()
sum = zlib.crc32(filedata)
if sum < 0:
sum &= 16**8-1
return "%.8X" %(sum)


for file in sys.argv[1:]:
sum = crc_checksum(file)
try:
dest_sum = re.split('[\[\]]', file)[-2]
if sum == dest_sum:
c_in = c_green
else:
c_in = c_red
sfile = file.split(dest_sum)
print "%s%s%s   %s%s%s%s%s" % (c_in, sum, c_null, sfile[0], c_in, dest_sum, c_null, sfile[1])
except IndexError:
print "%s   %s" %(sum, file)
alias snoot='find . ! -path "*/.svn*" -print0 | xargs -0 egrep '

一个 Quick and Dirty Python 脚本,它每5秒查找 google.com 的 DNS,如果成功就响一声,如果失败就响两声。

我写这篇文章的时候,我不得不生活在一个非常古怪的家庭网络中。它让我立即知道网络的状态,即使我头朝下,头朝下,双手塞满网络电缆,嘴里叼着手电筒穿过房间。

MySQL 备份。我做了一个 Windows 批处理脚本,它可以创建 MySQL 数据库的增量备份,每天创建一个新的转储,并在远程服务器上每10分钟备份一次。它救了我无数次的命,尤其是在无数次客户打电话来,大声嚷嚷说数据库里的记录“消失了”的情况下。我选择了“没问题,让我们看看发生了什么”,因为我还编写了一个二进制搜索脚本,它将查找数据库中记录出现的最后时刻。从那里就很容易理解是谁“偷”了它,以及为什么。
你无法想象这些有多么有用,我已经使用它们将近5年了。我不会转换到其他任何东西,因为他们已经粗略测试,他们是定制的,这意味着他们正是我需要什么,没有更多的,但我已经调整了他们如此之多,这将是一个快速增加额外的功能。
因此,我的“杰作”是一个 MySQL 增量备份 + 远程备份 + Windows 日志搜索系统。我也写了一个 Linux 版本,但是我把它弄丢了,可能是因为它只有大约15行 + 一个 cron 作业,而不是 Windows 的大约1200行 + 两个计划任务。

我已经没有代码了,但是不管你信不信,我写的最有用的脚本可能是 VBA。我有一个烦人的同事,脾气非常暴躁,我叫他樱桃炸弹。当顾客打来电话,然后站起来隔着隔间的墙对我大吼大叫时,他经常会生气,这会扼杀我的工作效率和士气。

我总是打开 MicrosoftExcel。当他这样做的时候,我会按下 Alt-tab 键到 Excel,然后在工具栏上出现了一个新的图标,上面有一个樱桃炸弹的图像。我会小心点击那个... 然后什么都不会发生。

然而,不久之后,我就会接到一个电话,说一些类似于“是的,是的,这听起来很糟糕。我最好去看看。”然后我会站起来,向樱桃炸弹道歉,然后离开。

我们使用的是 NetWare,它内置了一个原始的消息传递系统。当我点击这个按钮时,一个小的 VBA 脚本会向我的朋友们发送一个 NetWare 消息,告诉他们樱桃炸弹又来了,请他们给我打电话。他一直没弄明白:)

这是几个月前我在 博客上发表的一篇文章,它已经从我认为很酷的想法变成了我最近记忆中吐出的最好的小技巧之一。我在这里引用它的全部内容:

==================

我在 bash 中花了很多时间 你可以在大多数 unix 机器上找到,谢天谢地,一些窗口和每个 麦克在外面第一眼看上去不过是个命令行界面 因此,大多数用户认为这是一个时代错误 他们宁愿忘记。

我在 bash 中做几乎所有的事情 我浏览目录,编辑文件,参与我的 每天的源代码签出和交付,搜索文件,搜索内部文件, 重新启动我的机器,甚至偶尔从命令行浏览网页。 Bash 是我数字存在的核心和灵魂。

麻烦的是,我一次打开大约6个窗口 今天上班的时候,我有一个在运行网络服务器,另一个在修改我的数据库, 第三个,第四个和第五个编辑不同的文件,而第六个正在研磨 通过我的机器试图记录系统中每个文件的名称。 为什么? 因为能够搜索这样的档案很方便,如果你 想知道在哪里找到一个对象的文件名。

当您这样做时,您的控制栏中会有很多名为 简单地说,“ bash。”如果你只有其中的一个,这很好,但它的痛苦时 你有6个或更多... ... 还有24个其他事情要做,我有3个 在同一个键盘/鼠标对的同时命令下显示器,我仍然 每个窗口都打开了几个 bash 终端。

所以我把它们放在一起。首先,把这些线放在你的 . 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

我浏览了一遍,写了几十段关于这一切是如何运作的 为什么会这样,但你不会真的感兴趣的,相信我。 有一本书的整整一章都在讲我为什么在这个问题上做了“ CMD = ...; echo...” 许多人(包括蓝主机,我的另一个域托管) 现在仍然在使用旧版本的 bash,它在处理陷阱方面有很大的缺陷, 所以我们被困在这里了,你可以移除 CMD 然后换成 $BASH _ COMMAND 如果您当前使用 BASH 版本,并且想要执行 研究。

无论如何,我使用的第一个脚本在这里 您的机器名称和目录,删减到一个合理的长度:

                       ============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";


==============================

在这篇博客文章的顶部有一个警告,你应该在此之前阅读 你开始问一些愚蠢的问题,比如,“你为什么不直接使用主机名?” 环境变量?”很简单: 因为这并不适用于所有 我试过的系统。

现在是非常酷的部分,还记得. bash _ profile 添加的第3行吗?

  trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG

它将在与前面相同的容器中转储 trim.pl 脚本输出,即打印 命令提示符和窗口标题,但是这次它将添加 命令! 这就是为什么你不想做所有 Bashrc: 运行的任何脚本(在我的机器上,man 是其中之一) 每条线路都会触发这个东西,人的输出会严重混乱 我们在这里做什么,我们对航站楼可不怎么友好。

为了获取您刚刚输入的命令,我们将 bash 的历史记录分割为 位:

                        ===========hist.pl============
#!/usr/bin/perl


while (<STDIN>)
{
$line = $_
}


chomp $line;
$line =~ /^.{27}(.*)/;
print $1;
==============================

所以现在,我有无数个窗口,他们说:

  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 中尝试了一下,您的.bashrc 是由非交互式脚本执行的 当你调用 bash 作为一种语言的时候 男人。各种各样的垃圾(完整的文本,我的。 bashrc,加上越狱 )出现在手册页的顶部。我建议进行测试 一旦您得到了这个 gem,就可以在命令行中快速调用‘ man man’ 都在一起。

我想是时候把定制的垃圾从我的.bashrc 中取出并放入 它应该在的地方。

顺便说一句,我发现自己在这个过程中的某个时刻输入了“ man trap”。

我有一个批处理文件,它建立了一个 VPN 连接,然后进入一个无限循环,每五分钟在连接的另一端连接一台机器,这样,如果我一段时间没有通过该连接产生任何流量,VPN 服务器就不会因为不活动而中断连接。

一个小脚本,监测一些流行网站的广告,匹配我的技能和电子邮件我的电子邮件。

最佳现实剧本?

我: “老板,我要加薪。”

老板: “加薪? 求你了,接受我的工作吧!”

不过,这也可能是 最糟糕的脚本!

一个名为 起来的 bash 脚本,这样如果我在 /a/very/deeply/nested/path/somewhere中并且我想要“向上”到 N目录,我可以键入 up 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>

注意:

通过完成上述伟大的工作,它可以扩展到后面的功能,将以下内容放入您的 bashrc:

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
}

我用它作为一个自动加载的函数。我只要输入“ mycd”,就会出现一个我经常 cd 到的目录列表。如果我碰巧知道数字,我可以说“ mycd2”。要向列表中添加一个目录,只需键入“ mycd/tmp/foo/some 目录”。

function mycd {


MYCD=/tmp/mycd.txt
touch ${MYCD}


typeset -i x
typeset -i ITEM_NO
typeset -i i
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


}

我经常使用一个 MS Word 宏,它采用源代码文件,在横向页面上将其格式化为等间距的两列,给行编号,并添加公司的页眉和页脚信息,如文件名、打印日期、页码和保密声明。

打印页面的两面使用大约1/4的纸张作为等效的 lpr命令。(现在还有人用 lpr吗? ? ?)

我已经为基于 Debian 的系统编写了一个小的 shell 脚本 Tapp。尤其是。Ubuntu.它基本上做的就是把你所有的“ apt-get”活动发布到你的 twitter 账户上。它帮助我跟踪我在 Ubuntu 系统中安装/删除程序的内容和时间。我为此创建了一个新的推特账号,并将其保密。非常有用。更多信息请点击: http://www.quicktweaks.com/tapt/

这是一个简单的 Python 脚本,可以将行结尾从 Unix 转换为 Windows,我把它放在了 System32目录中。现在它已经丢失了几个月,但是基本上它可以将一个已知的基于文本的文件类型的列表转换为 Windows 行结尾,并且你可以为一个通配符列表指定要转换的文件,或者所有文件。

虽然不是 每个日,但我确实使用了 XSLT 脚本来创建我的婚礼邀请函(一个用于插入邀请卡的 Pages 文件,一个用于地址标签的 HTML 文件)。

我的下载目录中的一个 Rakefile 文件包含从所述目录复制文件到外部驱动器上各自的媒体存档的任务。考虑到我的互联网速度和存储容量,我每周要花几个小时的时间复制 hellanzb 下载的每一个媒体(我可以补充说,这是完全合法的)。

同一文件中的另一个非常有用的任务是登录到 IMDB 中,并从中获取我所有媒体的节目列表/光盘,然后检查 NewzBin 中是否有可以填补我所有漏洞的报告。

综上所述,这意味着我不得不什么也不做,作为交换,我每天早上醒来时看到的媒体数量超过了当天坐在外部硬盘上所能消耗的媒体数量。

我有没有说过这完全是光明正大的合法行为:

我可能会将这些内容合并到一种命令行媒体管理器/播放器中(将内容外包给 mplayer) ,并在有时间的时候在 GitHub 上发布。

Work@Home.ps1和 Work@Work.ps1 = > 修改主机文件,以通过 LAN 或 WAN 地址。

我喜欢根据照片拍摄的日期将照片存储在一个目录中。因此,我编写了一个程序,可以扫描存储卡中的图片,根据图片的日期在我的硬盘上创建任何文件夹,然后将它们复制进来。

我曾经在一个科技夏令营工作,我们必须在周末为小组里的每个孩子写这些文章,然后他们会收到这些文章并把它们作为纪念品带回家。通常情况下,这些包括一组通用的句子,和一到两个个性化的句子。我写了一个 Python 脚本,它从一大堆罐头句子中构建了一篇这样的文章,并允许用户在中间添加几个个性化的句子。这为我和其他我让他们知道这个秘密的辅导员节省了大量的时间。尽管大部分内容都是自动完成的,但我们的报告看起来仍然比许多“诚实”的报告要好,因为我们可以在个性化的部分投入更多的时间。

我有一个每天早上运行的批处理文件,它会启动一个浏览器,把标签加载到我每天想要查看的所有网站上(Woot,Dilbert,Doonesbury,UserFriendly; 季节性的,纽约大都会队的分数和 electoral-vote.com ,加上一些需要定期访问以保持会员活跃的网站)

我编写了一个在 Linux 中使用的文件提取工具,它可以提取大约20种不同的文件格式,并使用文件内容,而不是文件名。

这个工具变得非常流行,我有一个定期的人谁下载从我的博客流。拿过来:

有时我会忘记我刚刚在一个目录中创建的最新文件是什么,但 ls 命令只会显示该目录中的每个文件,我只想要一些最新的文件,所以我把它放在我的。心理咨询中心

 ls -l -t | awk 'NR<15{print $0}'

(实际上,它在一个名为 lt 的文件中,在. chrc 中,它被设置为: alias lt’~/lt’)

所以现在它只会给我看一些文件。

VBS 脚本创建一个 YYYY/YYYY-MM/YYYY-MM-DD 文件结构在我的照片文件夹,并移动照片从我的相机到适当的文件夹。

我写了一些代码,自动调整所有的东西,Powertop 建议当我拔掉我的笔记本电脑和撤销,如果我把笔记本电脑回来。最大功率,最大效率,最大方便。

运行 WinXP 和我似乎从来没有时间开始碎片整理并等待它完成。因此,我编写了自己的脚本来启动 XP 内置的 defrag.exe,并将其安排为夜间运行。结果保存在 C: Temp 中的日志文件中,以便以后查看。

@echo off


GOTO :MAIN
###########################################################
#
#  Reason:
#     This script runs the defrag utility.
#
#  Suggestion:
#     Schedule this script to run daily (via schtasks)
#
#     Example:
#        SCHTASKS /Create /SC DAILY /ST 03:00:00
#                 /TR \"C:\path\to\DAILY_DEFRAG.BAT" /TN "Daily Defrag of C Drive\"
#
#     Example:
#        AT 03:00 /every:Su,M,T,W,Th,F,Sa C:\path\to\DAILY_DEFRAG.BAT
#
#  Required OS:
#     Windows XP or Windows Server 2003
#
#  Required files:
#     DEFRAG.EXE
#
#
###########################################################


:MAIN


:: Output a listing of scheduled tasks
SCHTASKS /QUERY /V > C:\temp\schtasks.out






:: *****************************************************
:: * SITE SPECIFIC Program Parameters                  *
:: *****************************************************
:: * Drive to defrag
SET TARGET=C:


:: * Log file
SET LOGFILE=C:\temp\defrag.log




:: *****************************************************
:: * No editable parameters below this line            *
:: *****************************************************




SETLOCAL




:: Announce intentions
echo.
echo Beginning defragmentation of disk %TARGET%
echo ----------------------------------------------


echo.
for /f "tokens=1 delims=_" %%a in ('date /t') do set NOW=%%a
for /f "tokens=1 delims=_" %%a in ('time /t') do set NOW=%NOW% %%a
echo  Start time: %NOW%


:: Run the defrag utility
C:\WINNT\SYSTEM32\defrag.exe %TARGET% -f -v > %LOGFILE%


echo.
for /f "tokens=1 delims=_" %%a in ('date /t') do set NOW=%%a
for /f "tokens=1 delims=_" %%a in ('time /t') do set NOW=%NOW% %%a
echo    End time: %NOW%


echo.
echo ----------------------------------------------
echo Defrag complete.
echo.




:END

这是一个 自动热键脚本,让我的生活触手可及,只需一个键盘:

  1. 内经常使用的应用程序、文件夹等 一个双赢 + 组合。这通常意味着激活应用程序,如果已经启动,否则启动应用程序
  2. 双击 ctrl 启动 Launchy-这导致了我不常用的应用程序的一些按键
  3. 在 XP 文件资源管理器中添加一些键盘快捷键,比如创建新文件夹、切换隐藏文件/显示文件扩展名、 Ctrl-Enter 在 emacs 中以文本文件的形式打开任何文件、使用当前路径设置打开命令行窗口(cmd 和 cygwin shell)等等。
  4. 窗口操作: 移动,调整大小,发送到下一个显示器,最大/最小化,切换总是在顶部,改变透明度,等等,所有只是键组合
  5. Misc,如 hibernate,弹出外部驱动器,谷歌任何选择的单词(在任何应用程序中的 ctrl-c 作为复制工程) ,关闭计时器等。所有东西都只有一个密码

这个键盘脚本让我非常开心; 事实上,这也是我仍然使用 windows 而不是 linux 作为主要平台的主要原因,因为 autohotkey 只能在 windows 上运行。

为了完整起见,我想我应该写上我自己的回答。

我写了一个简单的脚本,把两个人住在一起的费用计算在一起,然后计算在月底谁欠对方的钱,这样每个人的花费都是一样的。我计划扩展它来存储每项支出的类别,并将它们存储在数据库中。当然,我可以只使用现有的软件... 但是那有什么乐趣呢?

不是很复杂,当然,但至于非工作相关的脚本,我在家里使用了很多,这是目前的领导者。

在很久以前的某个时候,我决定将 web 主机的 public _ html 目录的所有文件放到 subversion 存储库中。然后我写了一个剧本:

  1. 创建、挂载和格式化 RAM 磁盘。
  2. 将存储库的主干导出到 RAM 磁盘。
  3. 调用 rsync将任何已更改的文件从 RAM 磁盘上传到我的托管提供商。我使用公钥/私钥对来节省每次输入登录信息的时间。
  4. 卸载 RAM 磁盘。

因此,将更新从存储库推送到服务器实际上是一个“一键”操作。

这个脚本最令人满意的地方在于,最初它更像是一个 shell 脚本练习,而不是一个大项目。然而,它可能已经节省了我无数的工作时间,并使更新网站的前景几乎没有压力,也许比我的电脑上的任何其他软件。

我想这取决于您如何定义有用,但是我最喜欢的小脚本是 * nix fortune程序的一个变体。看看下面,你就会明白它是干什么的:

telemachus ~ $ haiku


January--
in other provinces,
plums blooming.
Issa

虽然不能完成任何事情,但是一首好的俳句会有很大的帮助。(我喜欢着色师对这首诗的诠释。)(剪辑: 如果我真的必须有用的话,我会说一个脚本,它允许用户输入美国的邮政编码,从谷歌得到当前的天气和0-3天的天气预报。)

我编写了一个 Python 程序来计算我的公寓的共同开支,并输出一个整洁的小网格,将室友作为列,费用类别作为行,以及每个室友在调整他对共同开支的贡献后所欠的租金金额。我们这样分享已经有一段时间了,但只是在月底把原始总数加起来。我需要更细致的控制。每个行项目最多有8次击键,这比 excel 要好得多。我有点孤注一掷地想要阻止一个室友每月花费我们预算的25% 在饮料上的趋势。

当我和妻子考虑给第一个孩子起名字的时候,我写了一个简单的 Ruby 脚本来帮助我们。它生成了所有的名字组合,并根据我想要避免的首字母黑名单检查首字母,排除任何与我的标准不匹配的首字母。对于一个书呆子父亲来说,这似乎是一件合适的事情,而且事实证明这是非常有价值和有用的。

除此之外,我还编写了几个 Python 脚本,作为我每天使用的 IRC 机器人。通过正则表达式匹配将 URL 保存到 美味。另一个用作简单的 IRC 推特接口,允许我检查 feed 和发布更新。

我编写了一个 Python 脚本,可以访问我读过的所有网络漫画,并下载任何新的漫画。我每天只运行一次,不需要单独访问每个站点,只需访问/Comics/Folder。;)

一个允许轻松获取 ps 结果的脚本:

# !/usr/bin/php-f < ? php $process = $argv [1] ; Echo shell _ exec (“ ps-ef | grep $process | grep-v grep”) ; 出口(0) ;

编写了一个小 bash 脚本,该脚本对字体有足够的了解,可以搜索大约10K 的字体并查找某些关键词,尽管这些关键词的文件名没有用处,但不会返回很多错误信息。跑了一会儿,在小巧的 iMac 上跑了大约一分钟,但是在过去的几年里,它为我节省了大约50个小时。

这样可以保持20天的 diff 备份,而不会使用大量空间。根据需要使用链接复制和 rsync 副本


#!/bin/bash




BACKUPDIR=/media/proxy/store/backups/


[ ! -d $BACKUPDIR ] && { echo "BACKUP DIRECTORY NOT AVAILABLE!"; exit; }


dobackup() {
SDIR=$2
PARENTDIR=$1
echo "BACKING UP $PARENTDIR/$SDIR to $BACKUPDIR"
bnum=20
count=$bnum
[ -d ${BACKUPDIR}${SDIR}.$bnum ] && {  mv ${BACKUPDIR}${SDIR}.$bnum ${BACKUPDIR}${SDIR}.tmp; }
until [ $count -eq 1 ]; do
let lastdir=$count-1
[ -d ${BACKUPDIR}${SDIR}.$lastdir ] && { mv ${BACKUPDIR}${SDIR}.$lastdir ${BACKUPDIR}${SDIR}.$count; }
let count-=1
done
cp -al  ${BACKUPDIR}${SDIR}.0  ${BACKUPDIR}${SDIR}.1
rsync -a --delete --bwlimit=2000  $PARENTDIR/$SDIR ${BACKUPDIR}${SDIR}.0
}


for backup in $(cat /sbin/backup.directories); do
PDIR=$(echo $backup | awk -F '::' {'print$1'})
DIR=$(echo $backup | awk -F '::' {'print$2'})
dobackup $PDIR $DIR
done


exit;




cat /sbin/backup.directories
/media/warehouse::Archive
/media/warehouse::concept


在我以前工作的地方,办公时间是荒谬的。那是家软件公司,我老板烂透了。他会在下午5:30左右(该回家的时候)给我们工作,让我们完成工作直到晚上11:00(远远超过我们理想的高效工作时间)。或者他会发现仍在进行中的代码中存在恼人的问题。

所以 我做了一个批处理文件和一个脚本,可以关闭我的计算机随机出现在晚上7点到8点之间。它有一个1分钟的定时器,以防万一我会留在几个小时后,需要中止关闭过程。

但我会在下午五点前离开办公桌这样他就找不到我了如果他想在结账时间扔垃圾的话。如果他来到我的办公桌前,看到我的电脑开着,他会以为我还在食品储藏室附近,或者在附近的小超市买些薯片什么的。但如果那段时间关机了,他会打我手机让我回办公室。

我还安排了机器上的 BIOS 在上午8:00或9:00左右开启机器,以防我感到懒惰,想在上午10:00或11:00左右溜达进去。如果我被发现走到办公桌前,他会问“你整个上午都去哪儿了?”我会说“我在和营销团队开会”或者“我出去吃早餐了”

笨狗

一个随机定时的提醒框,保证每小时至少弹出一次,提醒我做几个俯卧撑。

我在军队的时候用过。

我还为自己和其他人编写了体系结构规则(http://architecturerules.org)。

我喜欢 git 指出什么时候应该少用,subversion 没有这个特性,所以我想在页面中轻松地得到彩色输出。Cgrep 别名让我快速选择。没有它,有时我得到原始的颜色输出。

我也不喜欢在浏览代码时看到某些结果,比如.svn ctag 二进制文件

grep -R sourcecodetext sourcedir | nosvn

下面是我在配置文件中的内容

Bash _ profile

alias nosvn="grep -v \"\.svn\|tags\|cscope\|Binary\""
alias less="less -R"
alias diff="colordiff -u"
alias cgrep="grep --color=always"


export GREP_OPTIONS='--color=auto'

装猫的箱子/包装纸

#!/bin/bash


old_file=$1
tmp_file=$2
old_hex=$3
old_mode=$4
new_file=$5
new_mode=$6


colordiff -u $old_file $tmp_file

Cat. gitconfig

[diff]
external = $HOME/bin/gitdiffwrapper

Subversion _ config | grep ^ diff-cmd

diff-cmd = /usr/bin/colordiff

编写了一个脚本来单击我的开始按钮,然后在半秒钟内再次单击它,并且每30秒重复一次。

在工作的时候让我在线,我可以在我的个人笔记本电脑旁边完成真正的工作。没有被工作软件困住。

不要告诉老板:)

copy con c.bat
c:
cd\
cls
^Z

我写了一个脚本,结果在我的团队中每天都在使用。当我曾经为英特尔工作时,我们有一个应用程序,它可以与访问数据库交谈,获取寄存器信息的转储(我致力于验证芯片组)。它将获取这些信息(来自 SQL 查询)并将其转储到 CSV 文件、 HTML 文件和 Excel 文件中。整个过程花了将近2个小时。没开玩笑。不知道为什么花了这么长时间。我们会在午饭前一小时开始,去吃午饭,然后再回来。

我觉得应该有更好的办法。我和维护注册表数据库的团队谈过,并从他们那里得到了 SQL 代码。然后,我编写了一个 perl 脚本,抓取数据并将其输出为 CSV、 HTML 和 Excel 格式。运行时间?大概1-2秒。速度大大提高。

2006年我在伊拉克服役期间也写了一些剧本(我在国民警卫队服役了9年——12月份退役)。我们使用这个旧的应用程序称为 ULLS-G (单位级物流系统-地面) ,是写在 ADA 和最初运行在 DOS。他们黑了它足够多的地方,它会运行在 Windows XP 在一个命令外壳程序。这个系统没有鼠标界面。一切都是通过键盘,它没有批处理功能。假设你想打印所有车辆运营商的执照?我们部队有150名士兵,所以花了很长时间。假设每个人都有资格驾驶一辆新车你想把它加入到每个人的驾驶资格中?你得一个一个来。

我能够为 SAGE 数据库找到一个 ODBC 驱动程序(ULLS-G 使用的驱动程序) ,因此我编写了能够与 SAGE 数据库通信的 perl 脚本。所以花了一个多小时的事情,现在只花了几秒钟。我还使用脚本和驱动程序进行报告。我们必须每天早上向营部报告所有情况。其他单位每天早上手写信息。我迅速创建了一个 Excel 宏,它使用相同的驱动程序,与 SAGE 数据库进行对话,并以这种方式更新了 Excel 电子表格。这是我写过的最复杂的 只有 Excel 宏。因为他们授予我陆军嘉奖奖章(美国)。所以,是的,我因为写 perl 脚本在军队里获得了一枚勋章:)有多少人能这么说?;)

一个简单的 all around shell 函数。 就在我懒得去想我要做什么的时候。

当我只是随机浏览一些目录,并且我不得不从 ls 切换到 cd,切换到更少的时候,这是非常有用的。

en() {
if [[ -z $1 ]] ; then
ls '.'


elif [[ -d $1 ]] ; then
cd $1


elif [[ -f $1 ]] ; then
less <$1
fi
}