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

时间:2008-10-09 16:51:40

标签: scripting

只是想知道这里有哪些小脚本/程序可以帮助人们完成日常生活(也就是与工作无关)。

一切顺利,开创性与否。对我来说,这是一个小蟒蛇脚本来计算给定距离和时间的运行速度。

78 个答案:

答案 0 :(得分:111)

我没有代码了,但是我写的最有用的脚本可能是,不管你信不信,在VBA中。我有一个讨厌的同事谁有这么短的导火索,我称他为樱桃炸弹。当客户打电话然后站起来并开始在我的隔间墙上咆哮时,他经常会生气,这会让我的工作效率和士气低落。

我一直打开Microsoft Excel。当他这样做的时候,我会用alt-tab到Excel,在工具栏上,有一个带有樱桃炸弹图像的新图标。我谨慎地点击那......没有任何事情会发生。

然而,不久之后我会接到一个电话,并会说“是的,是的,这听起来很糟糕。我最好看一看。”然后我会起床,向Cherry Bomb道歉并走开。

我们使用的是NetWare,它内置了一个原始的消息系统。当我点击按钮时,一个小的VBA脚本会向我的朋友发送一条NetWare消息,告诉他们Cherry Bomb再次出现在它身上他们会打电话给我吗?他从未弄明白:)

答案 1 :(得分:110)

我的笔记本电脑掉了下来;所以我编写了一个程序,将200 MS内的两个“0”击键替换为o,两个“0”击键在700 MS之间,彼此为0,忽略其余的;所以在我更换键盘之前,我可以使用笔记本电脑。

哇;我不知道这会如此受欢迎:p

至于如何 - 微软公开了一个名为“Hooks”的不错的小API功能。

http://msdn.microsoft.com/en-us/library/ms644959(VS.85).aspx#wh_keyboard_llhook

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

我之所以知道这个的原因实际上并不是因为我正在写一个键盘记录器 - 而是因为我不久前写了一个程序smiler到Synergy

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

答案 2 :(得分:94)

一个名为 up 的bash脚本,这样如果我在/a/very/deeply/nested/path/somewhere并且我想要“up” N 目录,我可以输入{{ 1}}:

up N

例如:

#!/bin/bash
LIMIT=$1
P=$PWD
for ((i=1; i <= LIMIT; i++))
do
    P=$P/..
done
cd $P

注意:gmatt:

完成上面的伟大工作,可以通过将以下内容放入bashrc来扩展为后退功能:

/a/very/deeply/nested/path/somewhere> up 4
/a/very> 

答案 3 :(得分:68)

超级远程复位按钮。
一个超级特殊模拟硬件的机架(当一个房间装满了VME板条箱的时间比你的GPU少)时,世界另一端的用户会在凌晨时分崩溃。进入实验室并通过安检需要一个小时。

但是我们不允许连接到超级特殊控制器或修改硬件。解决方案是旧的DEC工作站,带有爱普生点阵打印机,在送纸旋钮上粘贴塑料标尺,将打印机放在重置按钮附近。
以普通用户身份登录WS(不允许root,所有外部端口都被锁定),打印带有24条空行的文档 - 旋转纸张进给旋钮,标尺按下超级特殊的重置硬件。

答案 4 :(得分:62)

在Windows XP上,我设置了一个AT作业,每天在C:\

中运行此命令
dir /s /b * > dirlist.txt

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

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"

答案 5 :(得分:38)

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

将照片上的所有照片复制到相机上,备份它们,然后将它们上传到Flickr。


上传到Flickr的内容来自uploadr.py(我不能相信)。

这是卸载相机的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)

答案 6 :(得分:32)

几年前,我在一些win32 api的帮助下编写了一个winforms应用程序,将自己从计算机中完全锁定了一个小时,这样就迫使我去锻炼身体。因为我很懒?不......因为我有个人健身目标。有时你需要一点点开始:)

答案 7 :(得分:14)

我的.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

答案 8 :(得分:14)

我编写了一个Python脚本,可以访问我阅读的所有网络漫画,并下载任何新的漫画。我每天只运行一次,并且无需单独访问每个站点,只需访问/漫画/文件夹即可。 ;)

答案 9 :(得分:14)

我写了一个脚本,最终每天都在我的团队中使用。当我以前在英特尔工作时,我们有一个应用程序与访问数据库交谈,以获取寄存器信息的转储(我在验证芯片组)。它将获取此信息(来自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脚本的奖章:)有多少可以这么说? ;)

答案 10 :(得分:14)

“backup.sh”,用于查找目录内容并将其发送到我的Gmail帐户。

答案 11 :(得分:13)

我是一名私人飞行员。我写了几个脚本,从aviationweather.gov获取当地机场的天气信息。它们对于快速回答“今天是飞行的好日子”这个问题非常有用。

答案 12 :(得分:12)

来自游戏网站Kotaku.com的removes obviously stupid[*] comments的Greasemonkey脚本。

[*]通过常见的拼写错误,全文写作,过度使用“LOL”和类似的启发式识别。

答案 13 :(得分:11)

一个perl脚本,它将我的本地Craigslist按选定的类别划分到一个SQL DB中,然后我可以查询它。

V2用计时器更新数据库并提醒我是否有任何查询匹配,基本上为我提供了CL的后台代理。

答案 14 :(得分:11)

alias dir ='ls -al'是我喜欢的首选脚本。

答案 15 :(得分:11)

一个线程HTML刮刀,可以从网站上下载系列/电影的所有可用字幕,这很难使用(搜索后你必须点击4次才能进入下载页面,只是为了显示更多广告)。现在我只是提出搜索条件并按下载。

答案 16 :(得分:8)

通过拖放操作重命名海量文件。

年龄前我已经制作了一个接受RegEx的小型VBScript并相应地替换了文件名。你只需要删除一堆文件或文件夹。我发现这些年来非常有用。

gist.github.com/15824(请注意,评论是德语)

答案 17 :(得分:8)

在我以前的工作地点办公时间太荒谬了。这是一家软件公司,我的老板很糟糕。他会在下午5:30左右给我们工作(正好回家的时候),让我们完成工作直到晚上11点(超过我们理想的工作时间)。或者他会在仍在进行中的代码中发现恼人的问题。

所以我在晚上7点到晚上8点之间的随机时间制作了一个批处理文件和一个可以关闭我的电脑的脚本。它有一个1分钟的计时器,以防我在下班后停留并需要中止关机过程。

但是我会在下午5点之前离开我的办公桌,所以如果他想在结账时间丢弃废话,他就找不到我。如果他来到我的办公桌上并看到我的电脑,他会认为我仍然在食品室区域附近或在附近的迷你市场上拿一些芯片或东西。但是,如果它在那个时候关闭,他会打电话给我的手机并告诉我回到办公室。

我还计划在我的机器上安装BIOS,以便在上午8:00或上午9:00左右打开机器,以防我感到懒惰,并希望在上午10:00或上午11:00之间漫步。如果我被抓到走到我的办公桌,他会问“你整个上午在哪里?”我会说“我正在与营销团队会面。”或者“我正在吃早餐。”

愚蠢的狗

答案 18 :(得分:8)

从几个月前我blog的帖子开始,这已经从我认为很酷的想法变成了我在近期记忆中咳得最好的小黑客之一。我在这里全文引用:

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

我花了很多时间在bash上。对于没有经验的人来说,bash是一个系统 你可以在大多数unix机器上找到它,谢天谢地,还有一些窗口和每个机器 Mac在那里。乍一看,它只不过是一个命令行界面, 因此,大多数看到过时不合时宜的用户都不关心 他们宁愿忘记。

我几乎用bash做的一切。我从一条命令行读取我的电子邮件 为什么我避开标记的电子邮件。我导航目录,编辑文件,参与我的 每日源代码签出和交付,搜索文件,搜索文件, 重启我的机器,甚至偶尔从命令行浏览网页。 bash是我数字存在的核心和灵魂。

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

执行此操作时,您的控制栏中会出现大量窗口 简单地说,“bash。”如果你只有其中一个,这很好,但它的痛苦 你有6个或更多....还有24个其他事情正在进行中。我有三个 在一个键盘/鼠标对的同时命令下监视器,我仍然 觉得需要更多。每个窗户都有几个打开的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 = ...;回应......”这本书有一整章 第三行。很多人(包括bluehost,托管我的其他域名) 仍在使用旧版本的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";

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

此博客文章的顶部有一条警告,您现在应该阅读 你开始问愚蠢的问题,“为什么你不只是使用HOSTNAME 环境变量通过@ENV?“简单:因为这不适用于所有人 我试过它的系统。

现在真的很酷。还记得.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的完整文本,加上转义   charecters)出现在手册页的顶部。我建议测试   一旦你得到,这个宝石在命令行上有一个快速的“man man”调用   一起来。

我想是时候把我的.bashrc中的自定义垃圾拉出来了   它属于哪里......

不幸的是,我发现自己在这个过程中的某个时刻打了“男人陷阱”。

答案 19 :(得分:7)

我曾经在一个技术夏令营工作,我们不得不在本周末为这个小组中的每个孩子撰写这些文章,然后他们会收到这些文章作为纪念品带回家。通常,这些由一堆通用句子和一到两个个性化句子组成。我写了一个python脚本,用一组句子构造了这些写作中的一个,并允许用户在中间添加几个个性化的句子。这为我和其他心理咨询顾问节省了大量时间。尽管其中很多都是自动化的,但我们的写作仍然看起来比许多“诚实”的更好,因为我们可以将更多的时间投入到个性化的部分中。

答案 20 :(得分:7)

一个快速而肮脏的Python脚本,每隔5秒就会查找一次针对google.com的DNS,如果成功则会查找一次,如果失败则两次。

我写这篇文章时,我不得不忍受一个非常脆弱的家庭网络。它让我立即知道网络的状态,即使我第一次站在房间的桌子底下,双手充满了网线和手电筒。

答案 21 :(得分:7)

一个Greasemonkey脚本,用于向在线游戏添加“按下该按钮”控制框。

答案 22 :(得分:7)

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

答案 23 :(得分:6)

一个小脚本,可以监控一些热门网站,查找符合我技能的广告,然后通过电子邮件向我发送电子邮件。

答案 24 :(得分:6)

我将它用作自动加载功能。我可以输入“mycd”,然后出现一个我经常cd到的目录列表。如果我碰巧知道那么数字我可以说“mycd 2”之类的东西。要将目录添加到列表,只需键入“mycd / tmp / foo / somedirectory”。

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

}

答案 25 :(得分:5)

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

让我在工作时保持在线状态,我可以在我旁边的个人笔记本电脑上完成真正的工作。不会被工作软件困扰。

不要告诉老板:)

答案 26 :(得分:5)

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

答案 27 :(得分:5)

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

http://gist.github.com/6806

答案 28 :(得分:4)

MySQL备份。我制作了一个Windows批处理脚本,它可以创建MySQL数据库的增量备份,每天创建一个新的转储,并在远程服务器上每10分钟备份一次。它无数次地保存了我的屁股,特别是在客户打电话的无数情况下,他们大喊大叫,这条记录刚从数据库“消失”。我没有问题,让我们看看发生了什么事情,因为我还写了一个二进制搜索脚本,可以查找数据库中存在记录的最后时刻。从那里可以很容易地理解谁“偷”它以及为什么 你不会想象这些有多么有用,而且我已经用了将近5年了。我不会仅仅因为它们已经过大致测试而且是定制的,这意味着它们完全按照我的需要而做了其他任何事情,但我已经对它们进行了如此多的调整,以至于可以轻松添加额外的东西。功能。
所以,我的“杰作”是用于Windows的MySQL增量备份+远程备份+日志搜索系统。我还为Linux编写了一个版本,但我已经丢失了它,可能是因为它只有大约15行+一个cron作业而不是Windows大约1,200行+两个计划任务。

答案 29 :(得分:4)

“net start”和“net stop”命令的各种快捷方式,这样我就可以启动和停止服务而无需进入服务MMC

答案 30 :(得分:4)

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

答案 31 :(得分:3)

我有一个脚本,提取id3标签,以某种格式新编码歌曲,然后根据标签将它们添加到我的音乐库。

300行的python。主要是因为跛脚无法以漂亮的方式处理标签。

答案 32 :(得分:3)

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

答案 33 :(得分:3)

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

....从1开始......

最大游戏数量是65k。相当可悲的是,经过5年多的时间,我仍然只有数百人。但至少我知道我从来没有玩过两次同样的手!

** Postscript - 这是我用过的唯一的 VB应用程序。我尖叫着回到C ++ ......

答案 34 :(得分:2)

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

源代码为here

答案 35 :(得分:2)

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

在调试器中工作时出现了很多 - 你找回错误代码,但是跟踪代码到文本是一个巨大的痛苦。在使用包装本机方法,OS调用或COM的软件时更常见...常常,常量会直接从错误头文件中复制而不会有其他上下文,重复值和没有枚举。

答案 36 :(得分:2)

我想这取决于你如何定义有用,但我最喜欢的小脚本是* nix fortune程序的变体。见下文,您将了解它的作用:

telemachus ~ $ haiku 

   January--
in other provinces,
   plums blooming.
    Issa

它并没有真正完成任何事情,但一个不错的ha句很长的路要走。 (我喜欢着色器决定如何解释这首诗。)(编辑:如果我真的必须有用,我会说一个允许用户输入美国邮政编码并获得当前天气的脚本和谷歌预测的0-3天。)

答案 37 :(得分:2)

我编写了一些代码来自动调整powertop在拔下我的笔记本电脑时所提出的所有内容,如果我重新插入笔记本电脑则撤消该功能。最大功率,最高效率,最大便利。

答案 38 :(得分:2)

一个每小时运行一次的脚本,用于重新播放基于两个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

答案 39 :(得分:2)

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

答案 40 :(得分:2)

我使用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的Delivered-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。

答案 41 :(得分:2)

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

http://lucasoman.com/code/updater

答案 42 :(得分:2)

最有用的?但是有这么多......

  1. d.cmd包含:@dir / ad / on
  2. dd.cmd包含:@dir / a-d / on
  3. x.cmd包含:@exit
  4. s.cmd包含:@start。
  5. sx.cmd包含:@start。 &安培;出口
  6. ts.cmd包含以下内容,它允许我通过RDP正确连接到另一台计算机的控制台会话,无论我是否使用Vista SP1。

    @echo off

    ver |找到“6.0.6001”

    如果ERRORLEVEL 0,如果不是errorlevel 1(设置TSCONS = admin)ELSE设置TSCONS = console

    echo Issuing命令:mstsc /%TSCONS%/ v%1

    启动mstsc /%TSCONS%/ v%1

  7. (很抱歉奇怪的格式化,显然每个答案不能有多个代码示例?)

    从命令提示符我将导航到我的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之类的内容。

答案 43 :(得分:1)

写了一个小的bash脚本,它对字体有足够的了解,可以搜索大约10k字体并查找某些关键字,尽管它们没有无用的文件名但却没有返回很多误报。花了一段时间才开始运行,大约一分钟就在极小的iMac上运行,但在过去的几年里它已经节省了我50个小时。

答案 44 :(得分:1)

一个AutoHotkey脚本,让我的生活只有一个键盘:

  1. 经常使用app,文件夹等 一胜+组合。这通常意味着在已经启动的情况下激活应用程序,然后启动应用程序
  2. “双击”ctrl以启动Launchy - 这会导致我不常用的应用程序中的一些按键
  3. 在Windows资源管理器(XP)中添加一堆缺少的键盘快捷键,例如创建新文件夹,切换隐藏文件/显示文件扩展名,Ctrl-Enter在emacs中打开任何文件作为文本文件,打开命令行窗口(cmd和cygwin shell)与当前路径集等等。
  4. Windows操作:只需按键组合移动,调整大小,发送到下一个监视器,最大/最小化,总是在顶部切换,更改透明度等等
  5. 杂项,如休眠,弹出外部驱动器,谷歌任何选定的单词(在任何应用程序中ctrl-c作为副本工作),关机计时器等等。只需一个组合键的一切
  6. 这个键盘脚本让我成为一个快乐的露营者;事实上,我仍然使用Windows而不是linux作为我的主要平台,因为autohotkey仅适用于Windows。

答案 45 :(得分:1)

为了完成起见,我想我应该包括我自己的答案。

我写了一个简单的脚本,它收取了两个人住在一起的费用,并计算了哪个人在月底欠其他钱,以便每个人平均消费。我计划扩展它以存储每个费用的类别并将它们存储在数据库中。当然,我可以使用现有的软件......但那里的乐趣在哪里?

不是很复杂,当然,但就我在家中使用很多的非工作相关脚本而言,这个是目前的领导者。

答案 46 :(得分:1)

在遥远的过去的某个时刻,我决定将我的web主机的public_html目录的所有文件放入一个subversion存储库。然后我写了一个脚本:

  1. 创建,安装和格式化RAM磁盘。
  2. 将存储库的主干导出到RAM磁盘中。
  3. 调用rsync将任何已更改的文件从RAM磁盘上传到我的托管服务提供商。我使用公钥/私钥对来避免每次都输入我的登录信息。
  4. 卸载RAM磁盘。
  5. 因此,将更新从存储库推送到服务器实际上是“一触式”操作。

    最令人满意的是,最初,它更像是一个shell脚本练习而不是Grand Project。然而,它可能为我节省了无数的工作时间,并使更新网站的前景几乎没有压力,可能比我计算机上的任何其他软件都要多。

答案 47 :(得分:1)

我写了一个python程序来计算我的公寓的共享支出,并输出一个整齐的小网格,室友作为列和费用类别作为行,以及每个室友欠租金多少钱,调整他的贡献共享费用。我们一直在分享这种方式,但只是在月底加起来总计。我需要更精细的控制。每个项目最多八次击键,这比excel更好。我有点绝望地试图阻止一个室友花费25%的预算用于饮料的月度趋势......

答案 48 :(得分:1)

当我们为第一个孩子考虑名字时,我写了一个简单的Ruby脚本来帮助我和我的妻子。它生成了所有名称组合,并根据我想避免的首字母黑名单检查了首字母,排除了任何与我的标准不符的名称。对于一个讨厌的爸爸来说这感觉是合适的事情,事实证明这是非常有价值和有用的。

除此之外,我编写了几个Python脚本,作为我每天使用的IRC机器人。一个通过正则表达式匹配将URL保存到delicious。另一个用作简单的IRC Twitter界面,允许我检查我的Feed并发布更新。

答案 49 :(得分:1)

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

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

答案 50 :(得分:1)

允许轻松greting ps结果的脚本:

#!/usr/bin/php -f <?php $process = $argv[1]; echo shell_exec("ps -ef | grep $process | grep -v grep"); exit(0);

答案 51 :(得分:1)

运行WinXP,我似乎没有时间启动碎片整理并等待它完成。所以我编写了自己的脚本来启动XP的内置defrag.exe并安排它运行nitely。结果将保存到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

答案 52 :(得分:1)

这样可以在不使用大量空间的情况下保留20天的差异备份。根据需要使用链接复制和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

答案 53 :(得分:1)

每个项目的类似backup.sh,即tars和gzips只是源,将其移动到快照目录中并使用时间戳标记它:project-mmddyy-hhmmss。用于提交之间的编码。

答案 54 :(得分:1)

随机计时器上的警告框,保证每小时至少弹出一次,以提醒我做一些俯卧撑。

我在军队时使用它。

我还为我和其他任何人编写了架构规则(http://architecturerules.org)。

答案 55 :(得分:1)

我喜欢git如何计算何时使用less,subversion没有该功能所以我想在寻呼机中轻松获得彩色输出。 cgrep别名让我快速选择。没有它,有时我会得到原始颜色输出。

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

grep -R sourcecodetext sourcedir | nosvn

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

cat .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'

cat bin / gitdiffwrapper

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

cat .subversion_config | grep ^ diff-cmd

diff-cmd = /usr/bin/colordiff

答案 56 :(得分:1)

执行文件行走并打印按磁盘使用情况排序的目录树的python脚本。

答案 57 :(得分:1)

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

答案 58 :(得分:1)

早在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()

答案 59 :(得分:1)

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

当我浏览一些随机目录时非常有用,我必须从ls切换到cd,而不是经常切换。

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

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

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

答案 60 :(得分:1)

我的下载目录中的Rakefile,包含将文件从所述目录复制到外部驱动器上各自媒体档案的任务。考虑到我的互联网速度和存储容量,我需要花费数小时的时间才能复制并重新命名由hellanzb下载的所有媒体(完全合法地,我可能会添加)。

同一文件中另一个非常有用的任务是登录并抓取IMDB以查找我所拥有的所有媒体的剧集列表/唱片,然后检查NewzBin以查找可填补我所有漏洞的报告。

结合起来,这意味着我必须绝对不做任何事情,作为交换,我每天早上醒来的媒体都比当天坐在外置硬盘上的媒体消耗得多。

我是否提到这完全是在董事会和法律上? d - :

我可能会将这一切合并到一个命令行媒体管理器/播放器(将内容转移到mplayer),并在我有时间的时候将它发布到GitHub上。

答案 61 :(得分:1)

我使用的DOS程序如果超过某个日期会出错。我只是看了它用来启动和更改它的批处理文件,所以它首先将日期更改为2000,然后运行程序。在程序退出时,它将日期更改回更改之前的日期。

答案 62 :(得分:1)

最佳真实剧本?

我: (进入房间)“老板,我要加薪。”

老板: (从桌子后面提供椅子)“加薪?请接受我的工作!”

然后,这可能是最差的脚本!

答案 63 :(得分:1)

我写了一个cron作业来获取我爸爸路由器的ip地址并将其ftp到一个安全的位置,所以当他需要帮助时我可以远程桌面并修复他的comp。

答案 64 :(得分:1)

#!/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,以及如果不存在则将它们分开。

答案 65 :(得分:1)

我经常使用带有源代码文件的MS Word宏,在横向页面上将其格式化为两列等宽字体,对行进行编号,并添加公司页眉和页脚信息,如文件名,打印日期,页面号码和保密声明。

打印页面的两面使用约1/4的纸张作为等效的lpr命令。 (有没有人再使用lpr ???)

答案 66 :(得分:1)

我为基于Debian的系统编写了一个小shell脚本tapt。 ESP。 Ubuntu Linux系统。它基本上做的是将所有“apt-get”活动发布到您的Twitter帐户。它帮助我跟踪我在Ubuntu系统中安装/删除程序的内容和时间。我为此创建了一个新的Twitter帐户,并将其保密。真有用。更多信息请访问:http://www.quicktweaks.com/tapt/

答案 67 :(得分:1)

一个简单的Python脚本,它将行结尾从Unix转换为我卡在我的system32目录中的Windows。现在已经失去了几个月,但基本上它已经将已知的基于文本的文件类型列表转换为Windows行结尾,您可以指定要转换的文件或所有文件,以用于通配符列表

答案 68 :(得分:1)

作为计划任务,将任何已修改/新文件从整个驱动器d:复制到备份驱动器g:,并记录复制的文件。它也可以帮助我跟踪我的所作所为。

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

G:

cd \ drive_d

d

cd \

输入g:\ backup_d.log&gt;&gt; G:\日志\ backup_d.log

echo ==========================================&gt; G:\ backup_d.log

d:\ mu \ bmutil \ justdate&gt;&gt; G:\ backup_d.log

xcopy / s / d / y / c g:\ drive_d&gt;&gt; G:\ backup_d.log

答案 69 :(得分:1)

我有一个批处理文件,它建立一个VPN连接,然后进入一个无限循环,每五分钟ping一次连接另一端的机器,这样如果我不知道,VPN服务器不会因为不活动而断开连接暂时不会在该连接上产生任何流量。

答案 70 :(得分:1)

Work@Home.ps1和Work@Work.ps1 =&gt;修改hosts文件,通过LAN或WAN地址。

答案 71 :(得分:1)

alias snoot='find . ! -path "*/.svn*" -print0 | xargs -0 egrep '

答案 72 :(得分:1)

名为assignIisSite_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_();
}

答案 73 :(得分:1)

我有一个每天早上运行的批处理文件,它会启动一个浏览器,其中的标签已加载到我想要检查的所有网站(Woot,Dilbert,Doonesbury,UserFriendly;季节性,NY Mets分数和选举投票。 com,以及一些需要定期访问以保持会员活动的网站

答案 74 :(得分:1)

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

这个工具非常受欢迎,我经常有一些人从我的博客下载它。得到它:

答案 75 :(得分:1)

有时我会忘记我刚才在目录中创建的最新文件,但是ls命令只会显示目录中的每个文件,我只想要一些最新的文件,所以我把它放在我的.cshrc中

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

(实际上它位于一个名为lt的文件中,在.cshrc中,它设置为:别名lt'〜/ lt')

所以现在我只会向我展示一些文件。

答案 76 :(得分:1)

动漫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)

答案 77 :(得分:1)


对于我们这些不记得我们在unix上的位置,或者我们正在使用哪个SID的人。
在你的.profile中弹出这个。

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