ここの人々が日常生活(仕事関連ではない)に役立つ小さなスクリプト/プログラムを書いているのだろうか。
画期的であるかどうかにかかわらず、何でもできます。今の私にとっては、距離と経過時間が与えられたときのランニングペースを計算する小さなpythonスクリプトです。
私のラップトップでoキーが外れました。そこで、200 MS以内の2つの「0」キーストロークをoとして、700 MS以内の2つの「0」キーストロークを0として置き換え、残りを無視するプログラムを作成しました。そのため、キーボードを交換する前にラップトップを使用できました。
ワオ;これがそんなに人気があるとは知りませんでした:p
方法については、Microsoftは「フック」と呼ばれる素敵な小さなAPI機能を公開しています。
http://msdn.Microsoft.com/en-us/library/ms644959(VS.85).aspx#wh_keyboard_llhook
そのフックを使用します。必要な処理を行う「フィルター」を作成できました(ヒント:コールバックウィンドウで1を返す場合、キーストロークは処理されません)。
これについて実際に知っている理由は、キーロガーを書いていたからではなく、 Synergy にプログラムスマイラーを書いたからです。
はい。私は、英数字キーをランダムな英数字キーに置き換えた別のプログラムを作成しました。それは本当に面白かった:D
私はもうコードを持っていませんが、おそらく私が書いた最も有用なスクリプトは、それを信じるかどうかにかかわらず、VBAにありました。とても短いヒューズを持っていて、彼をチェリーボムと呼んでいたいらいらする同僚がいました。顧客が電話して立ち上がって、キュービクルの壁を越えて私を怒らせ、生産性と士気を殺すと、彼はしばしば怒ります。
Microsoft Excelを常に開いていました。彼がこれを行うとき、私はExcelにAltキーを押しながら移動し、ツールバーには桜の爆弾のイメージのある新しいアイコンがありました。私は慎重にそれをクリックします...そして何も起こりません。
しかし、その後すぐに電話がかかってきて、「ええ、ええ、それは悪いように聞こえます。見てみた方がいい」と言うでしょう。そして起きて、チェリーボムに謝罪し、立ち去った。
起こったのは、NetWareを使用し、プリミティブメッセージングシステムが組み込まれていることです。ボタンをクリックすると、小さなVBAスクリプトがNetWareメッセージを友人に送信し、チェリーボムが再び来たと伝えます。私に電話してください。彼はそれを理解していませんでした:)
という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>
NB by gmatt:
上記のすばらしい作業を終えて、bashrcに以下を配置することにより、back関数に拡張できます。
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
}
スーパーリモートリセットボタン。
ラックのスーパースペシャルシミュレーションハードウェア(VMEクレートでいっぱいの部屋があなたのGPUに満たなかった時代に遡る)の反対側のユーザー世界は早朝にクラッシュします。研究室に入り、セキュリティを確保するのに1時間かかりました。
しかし、super specialコントローラーに接続したり、ハードウェアを変更したりすることは許可されていません。解決策は、エプソンドットマトリックスプリンターを備えた古いDECワークステーションで、プラスチックの定規を給紙ノブにテープで貼り付け、プリンターをリセットボタンの近くに配置しました。
通常のユーザーとしてWSにログインし(ルートは許可されず、すべての外部ポートがロックされます)、24空白行でドキュメントを印刷します-紙送りノブを回転させ、ルーラーがリセットで押されました- 特別なハードウェア。
Windows XPでは、C:\でこのコマンドを毎日実行するようにATジョブを設定しました
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"
デジタルカメラを接続すると自動的に実行されるPythonスクリプトがあります。
カメラ上のカードからすべての写真をコピーし、バックアップしてから、Flickrにアップロードします。
Flickrにアップロードする部分は、 ploadr.py (私は信用できません)から来ています。
カメラをアンロードするためのPythonコードを次に示します。画像をDESTDIRにコピーする前に、SRCDIRを再帰処理し、各画像に日付と時刻を付けます。
#!/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 __== "__main__":
os.path.walk(__SRCDIR__, cbwalk, None)
数年前、いくつかのwin32 APIの助けを借りてwinformsアプリを作成し、1時間コンピューターを完全にロックアウトして、運動を強制するようにしました。怠けたから?いいえ...私には個人的なフィットネスの目標があったからです。開始するにはちょっとしたキックが必要な場合があります:)
私が読んだすべてのWebコミックにアクセスし、新しいコミックをダウンロードするPythonスクリプトを作成しました。 1日1回実行するだけで、各サイトに個別にアクセスする必要はありません。/Comics/フォルダーにアクセスするだけです。 ;)
私の.cmdバックアップスクリプト。毎晩サーバー上で実行され、平日に従ってバックアップファイルに名前を付けます。 1週間のバックアップにより、私(および私の家族)は何度も救われました。
::バックアップ引数: ::/V Verify? (はい/いいえ) ::/R所有者へのアクセスを制限しますか? (はい/いいえ) ::/RSリムーバブルストレージ? (はい/いいえ) ::/HCハードウェア圧縮(オン/オフ) ::/Mバックアップタイプ(通常/コピー/差分/増分/毎日) ::/Lログファイルの種類(f/s/n) ::/D "説明" ::/J "ジョブ名" ::/F "ファイル- name " SETLOCAL ::ネットワークドライブがマウントされていることを確認します CALL C:\ bat\configs\MapShares-home.cmd echo on set today =%DATE:〜0,3% if%today%== Mon set昨日= 0日曜日 if% today%==火曜日は昨日= 1月曜日 if%today%==水曜日は昨日= 2火曜日 if%today%==木曜日は昨日= 3水曜日 if%today% ==金曜日昨日= 4木曜日 if%today%==土曜日昨日= 5金曜日 if%today%==日曜日昨日= 6土曜日 set configsDir =%〜dp0 set storePath = C:\ mybackups ::(例:月曜日のCファイル) set title =%yesterday%バックアップセット echo%DATE%%TIME%%title%> "%storePath%\%yesterday%_backup.log" CALL BackupConfigs.bat ::新しいBKFファイルを作成します C:\ WINDOWS\system32\ntbackup.exeバックアップを呼び出します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%完了>> "%storePath%\%yesterday%_backup.log" copy "%storePath%\%yesterday %.bkf "" V:\ Backups\Neptune " CALL C:\ bat\clean-temps.bat defrag -v C:>" %storePath%\%yesterday%_defrag.log " ::バックアップディレクトリの表示 start/D" C:\ bat\Backups\"checkbkf.bat ENDLOCAL :: pause
ディレクトリの内容をtarし、それをGmailアカウントに送信する「backup.sh」。
私は自分のチームで毎日使用されることになったスクリプトを書きました。インテルで働いていたとき、アクセスデータベースと通信して登録情報のダンプを取得するアプリがありました(チップセットの検証に取り組みました)。この情報を(SQLクエリから)取得し、CSVファイル、HTMLファイル、およびExcelファイルにダンプします。全体のプロセスには約2時間かかりました。冗談抜き。なぜそんなに時間がかかったのか分かりません。昼食の1時間前に開始し、昼食に行ってから戻ってきました。
これを行うにはもっと良い方法が必要だと思いました。私は、レジストリデータベースを管理し、それらからSQLコードを取得したチームと話しました。次に、データを取得してCSV、HTML、およびExcel形式で出力するPerlスクリプトを作成しました。ランタイム?約1〜2秒。速度が大幅に向上しました。
また、2006年にイラクでの展開中にいくつかのスクリプトを作成しました(9年間、国家警備隊に勤務しました-12月に出ました)。私たちは、ADAで記述され、元々DOSで実行されていたULLS-G(ユニットレベルロジスティクスシステム-グラウンド)と呼ばれるこの古いアプリを使用しました。彼らは、コマンドシェルでWindows XPで実行される場所に十分にハッキングしました。このシステムにはマウスインターフェイスがありませんでした。すべてがキーボード経由であり、バッチ機能はありませんでした。それでは、すべての車両オペレーターのライセンスを印刷したいとしますか?まあ...私たちのユニットには150人の兵士がいたので、長い時間がかかりました。全員が新しい車両の資格を取得し、それをすべてのオペレーターの資格に追加したいとしますか?あなたは一つ一つそれをしなければなりませんでした。
SAGEデータベース(ULLS-Gが使用したもの)のODBCドライバーを見つけることができたため、SAGEデータベースと通信できるPerlスクリプトを作成しました。そのため、1時間以上かかっていた作業が数秒で完了しました。また、レポートにはスクリプトとドライバーを使用しました。毎朝大隊までのすべての情報を報告しなければなりませんでした。他のユニットは、毎朝手で情報を書き込みます。同じドライバーを使用し、SAGEデータベースと通信して、Excelスプレッドシートをそのように更新したExcelマクロを作成しました。これは最も複雑で、のみこれまでに書いたExcelマクロです。彼らが私に陸軍表彰メダルを授与したので、それは報われました。ええ、私は軍でPerlスクリプトを書いてメダルを獲得しました:)それを何人が言えるでしょうか? ;)
私はパイロットです。 aviationweather.govから地元の空港の天気情報を取得するスクリプトをいくつか作成しました。 「今日は飛ぶのに良い日ですか?」という質問に対する簡単な回答に役立ちました。
明らかに愚かな[*]コメントを削除する ゲームサイトKotaku.comからのGreasemonkeyスクリプト。
[*]一般的なスペルミス、すべて大文字の書き込み、「LOL」の過度の使用、および同様のヒューリスティックによって識別されるように。
alias dir = 'ls -al'は私のお気に入りのスクリプトです。
使用するのが面倒なサイトからシリーズ/映画の利用可能なすべての字幕をダウンロードするスレッド化されたHTMLスクレーパー(ダウンロードページにアクセスするには、検索後に4回クリックする必要があり、広告を表示するだけです)。ここで、検索条件を入力し、ダウンロードを押します。
選択したカテゴリごとにローカルのCraigslistをSQL DBにスクレイピングするPerlスクリプト。その後、クエリを実行できます。
これのV2は、タイマーを使用してDBを更新し、クエリのいずれかで一致した場合にアラートを出し、基本的にCLのバックグラウンドエージェントを提供します。
ドラッグ&ドロップによる大量ファイルの名前変更。
数年前、RegExを受け入れ、それに応じてファイル名を置き換える小さなVBScriptを作成しました。その上にたくさんのファイルやフォルダーをドロップするだけです。私はそれが長年にわたって非常に役立つことがわかりました。
Gist.github.com/15824 (コメントはドイツ語です)
これは、数か月前に私の blog に投稿したことから、私が最近の記憶で咳をした最高の小さなハックの1つにクールだと思ったアイデアではなくなった。ここで完全に引用します:
==================
私はbashに多くの時間を費やしています。初心者にとっては、bashはほとんどのUNIXマシンにあるシステムであり、ありがたいことにいくつかのウィンドウとそこにあるすべてのMacにあります。一見、コマンドラインインターフェイスにすぎないため、多くのユーザーは、このようなことを時代錯誤と見なすことを忘れてしまいます。
私はほとんどすべてをbashで行います。私はコマンドラインから自分のメールを読みます。それが私がマークアップされたメールを避ける理由です。ディレクトリをナビゲートし、ファイルを編集し、毎日のソースコードのチェックアウトと配信を行い、ファイルを検索し、ファイル内を検索し、マシンを再起動し、コマンドラインからWebページを参照することもあります。 bashは私のデジタル存在の核心です。
問題は、一度に6つのbashウィンドウを開く傾向があることです。今日の仕事では、Webサーバーを実行している人、データベースをいじっている人、3番目、4番目、5番目の異なるファイルを編集している人、6番目の人がシステム上のすべてのファイルの名前を記録しようとしてマシンを駆け回っていました。どうして?ファイル名でオブジェクトを見つける場所を知りたい場合、そのようなアーカイブを検索できると便利だからです。
これを行うと、単に「bash」という名前のコントロールバーに多数のウィンドウが表示されます。そのうちの1つしかない場合はこれで問題ありませんが、6つ以上ある場合は苦痛になります。 1つのキーボード/マウスペアの同時コマンドの下に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
私はこれを調べて、これがすべてどのように機能するのか、そしてそれがどのように設定されているのかについて、何十もの段落を書きましたが、あなたはあまり興味がありません。私を信じて。その3行目に「CMD = ...
; echo ...」を実行した理由については、本の章全体があります。多くの人々(他のドメインがホストされているbluehostを含む)はまだ使用しており、トラップの処理方法に大きなバグがある古いバージョンのbashを使用しているため、これに固執しています。現在bashバージョンを使用していて、調査を実行したい場合は、CMDを削除して$ BASH_COMMANDに置き換えることができます。
とにかく、最初に使用するスクリプトはこちらです。マシン名とディレクトリを含む適切な長さに切り詰められたニースプロンプトが作成されます。
============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環境変数を使用しなかったのか」などの愚かな質問を始める前に読むべき警告があります。シンプル:試したすべてのシステムで機能しないためです。
さて、本当にクールなビットです。 .bash_profileオプションの3行目を覚えていますか?
trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG
前と同じコンテナにtrim.plスクリプト出力をダンプし、コマンドプロンプトとウィンドウタイトルの両方に出力しますが、今回は入力したコマンドを追加しています!これが、あなたが.bashrcでこれらすべてを行いたくない理由です:あなたが実行するスクリプト(私のマシンでは、男がその1つです)はすべての行でこのことをトリガーします。ここでやっていることによって、男性の出力は深刻に文字化けします。ターミナルでニースを正確にプレイしているわけではありません。
入力したばかりのコマンドを取得するために、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」と入力していました。
私の以前の職場では、勤務時間はばかげていました。それはソフトウェア会社であり、私のボスは吸われました。彼は午後5時30分頃(家に帰る時間)に私たちに仕事を与え、午後11時まで(理想的な生産時間を過ぎるまで)仕事を終わらせました。または、彼はまだ進行中のコードに迷惑な問題を見つけるでしょう。
コンピューターをオフにするバッチファイルとスクリプトを作成しました 7:00 PMから8:00 PMまでのランダムな時間に。時間外に滞在する場合に備えて1分間のタイマーがあり、シャットダウンプロセスを中止する必要がありました。
しかし、私は午後5時前に机を離れるので、彼はチェックアウト時間の周りにがらくたを捨てたいと思ったら私を見つけることができませんでした。彼が私の机に来て私のコンピューターを見ると、彼は私がまだいくつかのチップまたは何かをつかむためにパントリー周辺または近くのミニマートにいると思うでしょう。しかし、その時間帯にオフになった場合、彼は私の携帯電話に電話して、オフィスに戻るように言ってきました。
また、マシンのBIOSをオンにしてマシンをオンにするようにスケジュールしました怠け者で、午前10時または午前11時頃に散歩したい場合に備えて、午前8時または午前9時頃。私が私の机に歩いて行くのを捕まえられたら、彼は「朝ずっとどこにいたの?そして、「マーケティングチームとの会議に出席していました」と言います。または「朝食を食べに出かけていました。」
愚かな犬
5秒ごとにgoogle.comのDNSを検索し、成功した場合は1回、失敗した場合は2回ビープ音を鳴らすQuick and Dirty Pythonスクリプト。
これは、非常に不安定なホームネットワークで生活しなければならなかったときに書いたものです。ネットワークケーブルでいっぱいの両手と口の中に懐中電灯を置いて、部屋の向こう側の机の下に最初に行ったときでも、ネットワークの状態を即座に知ることができました。
私はテクノロジーサマーキャンプで働いていましたが、週の終わりにグループの子供たちのためにこれらの記事を作成しなければなりませんでした。通常、これらは一般的な文の束と、1〜2個のパーソナライズされた文で構成されていました。私は、これらの書き込みの1つを定型文のバンクから作成し、ユーザーが中央にいくつかのパーソナライズされた文を追加できるようにするpythonスクリプトを書きました。これは私と秘密を教えた他のカウンセラーのために膨大な時間を節約しました。自動化されたものの、パーソナライズされた部分により多くの時間を費やすことができたため、私たちの評価は多くの「正直な」ものよりも良く見えました。
これをオートロード機能として使用します。 「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
}
#! /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
人気のあるWebサイトのいくつかを監視して、自分のスキルに合った広告をメールで送信します。
オンラインゲームに「多くのボタンを押す」コントロールボックスを追加するGreasemonkeyスクリプト。
写真が撮影された日付に基づいてディレクトリに写真を保存するのが好きです。そのため、メモリカードの写真をスキャンし、写真の日付に基づいて必要なフォルダーをハードディスク上に作成し、それらをコピーするプログラムを作成しました。
Rsyncを使用してローテーションバックアップを実行するシェルスクリプト。また、任意の子プログラムの実行をサポートして、他の事前バックアップアクティビティ(おいしいブックマークのダウンロードなど)をサポートします。
スクリプトを書いて[スタート]ボタンをクリックし、0.5秒後にもう一度クリックして、30秒ごとに繰り返します。
仕事中はオンラインとマークされたままになり、実際の仕事を自分のラップトップですぐ隣で行うことができます。仕事用ソフトウェアにとらわれない。
上司に言わないでください:)
「net start」および「net stop」コマンドへのさまざまなショートカット。これにより、サービスMMCに入らずにサービスを開始および停止できます。
「Y」時間にわたって「X」ミリ秒ごとに左クリック(またはダブルクリック)する小さなアプリケーション。その飲酒鳥が原子力発電所で働く必要はもうありません! ;)
MySQLバックアップ。 MySQLデータベースの増分バックアップを作成し、毎日新しいダンプを作成し、リモートサーバーで10分ごとにバックアップするWindowsバッチスクリプトを作成しました。特に、クライアントが電話をかける数え切れないほどの状況で、データベースからレコードが「消えた」だけだと大声で叫ぶと、お尻が何回も節約されました。データベースにレコードが存在する最後の瞬間を探すバイナリ検索スクリプトも作成したため、「問題はありません。何が起こったのか見てみましょう」と言いました。そこから、誰がそれを「盗んだ」のか、そしてなぜそれを理解するのは非常に簡単です。
これらがどれほど便利であるか想像できないでしょうし、私は5年近く使ってきました。おおまかにテストされており、カスタムメイドであるため、他の何かに切り替えることはありません。つまり、必要なものを正確に実行しますが、余分なものを追加するのが簡単になるように微調整しました機能。
つまり、私の「傑作」は、MySQLの増分バックアップ+リモートバックアップ+ Windows用のログ検索システムです。 Linux用のバージョンも作成しましたが、どこかで紛失しました。Windowsの約1,200行+スケジュールされたタスクの代わりに、たった15行+ cronジョブだったからでしょう。
Id3タグを抽出して、特定の形式で曲を新しくエンコードし、タグに従って音楽ライブラリに追加するスクリプトを取得しました。
Pythonの300行。ほとんどの場合、ラメはタグをニース形式で処理できないためです。
プレイしたフリーセルのゲーム番号を追跡し、正常に完了したシンプルなVBアプリを作成し、常に別のシードで起動しました。
.... 1から始まる...
最大ゲーム数は65kです。むしろ悲しいことに、5年以上経っても私はまだ数百人しかいません。しかし、少なくとも同じハンドを2回プレイしたことはありません。
**追記-これはonly VBアプリです。私はC++に戻って叫びました...
写真フォルダーにYYYY/YYYY-MM/YYYY-MM-DDファイル構造を作成し、カメラから適切なフォルダーに写真を移動するVBSスクリプト。
ラップトップを取り外したときにpowertopが提案するすべてのことを自動的に調整し、ラップトップを再び接続した場合は元に戻すコード行をいくつか作成しました。最大電力、最大効率、最大の利便性。
サードパーティのJavaDocからすべてのエラーコード定数を抽出し、特定のエラーコードの定数名を検索できる小さなタスクバープログラム。さらに、HEXから10進数などへの変換を追加します。
これは、デバッガーで作業しているときによく発生します。エラーコードは返されますが、コードをテキストに戻すのは非常に面倒です。ネイティブメソッド、OS呼び出し、またはCOMをラップするソフトウェアを使用する場合はさらに一般的です...多くの場合、定数は追加のコンテキスト、繰り返し値、列挙なしでエラーヘッダーファイルから直接コピーされます。
1時間ごとに実行され、spanとhamが置かれている2つのIMAPフォルダーに基づいてスパムフィルターを再トレーニングするスクリプト。
#!/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
最も便利ですか?しかし、非常に多くがあります...
ts.cmdには次のものが含まれているため、Vista SP1を使用しているかどうかに関係なく、RDPを介して別のマシンのコンソールセッションに適切に接続できます。
@エコーオフ
ver | 「6.0.6001」を見つける
eRRORLEVEL 0の場合errorlevel 1でない場合(TSCONS = adminを設定)ELSE set TSCONS = console
echo発行コマンド:mstsc /%TSCONS%/ v%1
開始mstsc /%TSCONS%/ v%1
(奇妙なフォーマットについては申し訳ありませんが、回答ごとに複数のコードサンプルを使用することはできないようです)
コマンドプロンプトからVSソリューションファイルのある場所に移動し、それを開きますが、blah.slnと入力してEnterキーを押すのが面倒です。だから私は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と入力してEnterキーを押すと、現在のディレクトリにソリューションファイルがあればそれが開きます。 pushdやpopdなどをpd.cmdとpop.cmdでラップします。
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
これにより、メーリングリスト用の2つのマクロが定義されます。 listdt(foo、[email protected])は、
:0:
* ^Delivered-To:.*[email protected]
Lists/foo
つまり、foo @ example.comを含むDelivered-Toヘッダーを持つメールはLists/fooフォルダーに配置する必要があります。また、処理されたファイルを、そのファイルを直接編集しないよう警告するコメントで始まるように調整します。
さて、率直に言って、m4は私を怖がらせます:誤ってマクロを再定義して、procmailがすべての電子メール、またはそのようなものを破棄し始めたらどうでしょうか?そのため、update-procmailrcと呼ばれるスクリプトを使用しています。これは、procmailrcがどのように変更されるかをdiff形式で示しています。変更がほんの数行で、私が意図したものとほぼ同じに見える場合、喜んでそれを承認できますが、ファイルに大きな変更がある場合は、編集をより注意深く見ることができます。
#! /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を変更することに対する不安を軽減しました。
タブとスペースの適切な組み合わせを使用してコードを自動的にインデントするCソースファイルをフォーマットするためのスクリプトを作成しました。これにより、エディターのタブ設定に関係なくファイルが正しく表示されます。
ソースコードは here です。
現在のディレクトリの設定ファイルを読み取り、FTPアカウントにログインし、最後に実行されてから変更されたすべてのファイルをアップロードするスクリプト。共有ホスティングを使用するクライアントにとって本当に便利であり、ファイルアクセスの唯一のオプションはFTPです。
これは、あなたがどのように便利なものを定義するかに依存すると思いますが、私のお気に入りの小さなスクリプトは* nix fortune
プログラムのバリアントです。以下を参照すると、それが何をするのかがわかります。
telemachus ~ $ haiku
January--
in other provinces,
plums blooming.
Issa
実際には何もしませんが、ニースの俳句は大いに役立ちます。 (カラライザーが詩の解釈を決定した方法が気に入っています。)(編集:本当に役立つ必要がある場合は、ユーザーが米国の郵便番号を入力して現在の天気を取得できるスクリプトを言うGoogleからの0〜3日の予測)。
every dayではありませんが、XSLTスクリプトを使用して結婚式の招待状(招待状カードへの挿入用のPagesファイル、および住所ラベル用のHTMLファイル)を作成しました。
シンプルなオールアラウンドシェル機能。私がやろうとしていることを考えるのが面倒になったとき。
ランダムなディレクトリをブラウジングしているだけで、lsからcdに切り替えて、それほど頻繁ではない場合に本当に便利です。
en() {
if [[ -z $1 ]] ; then
ls '.'
Elif [[ -d $1 ]] ; then
cd $1
Elif [[ -f $1 ]] ; then
less <$1
fi
}
Linuxで使用するファイル抽出ツールを作成しました。これは約20の異なるファイル形式を抽出でき、ファイル名ではなくファイルの内容を使用します。
このツールは非常に人気があり、私のブログからそれをダウンロードする人々の定期的なストリームがあります。ここで入手してください:
スケジュールされたタスクとして、変更された/新しいファイルをドライブd:からバックアップドライブg:にコピーし、コピーされたファイルをログに記録します。それは、私がいつ何をしたかを追跡するのにも役立ちます。
justdateは、日付と時刻を画面に出力する小さなプログラムです
g:
cd\drive_d
d:
cd \
タイプg:\ backup_d.log >> g:\ logs\backup_d.log
echo =========================================> g:\ backup_d.log
d:\ mu\bmutil\justdate >> g:\ backup_d.log
xcopy/s/d/y/c 。 g:\ drive_d >> g:\ backup_d.log
行末をUnixからWindowsに変換する単純なPythonスクリプトで、system32ディレクトリに残っています。数か月間は失われていましたが、基本的には既知のテキストベースのファイルタイプのリストをWindowsの行末に変換し、ワイルドカードリストの変換するファイルまたはすべてのファイルを指定できます。
特定の日付を過ぎるとエラーになるDOSプログラムを使用しています。起動に使用していたバッチファイルを確認し、最初に日付を2000に変更してからプログラムを実行するように変更しました。プログラムの出口で、日付を変更前の日付に戻しました。
各プロジェクトの同様のbackup.shは、ソースのみをtarおよびgzipし、スナップショットディレクトリに移動し、タイムスタンプproject-mmddyy-hhmmssのラベルを付けます。コミット間のコーディングに役立ちます。
遠い過去のある時点で、Webホストのpublic_htmlディレクトリのすべてのファイルをSubversionリポジトリに置くことにしました。次に、次のスクリプトを作成しました。
rsync
を呼び出して、変更されたファイルをRAMディスクからホスティングプロバイダーにアップロードします。私は公開鍵と秘密鍵のペアを使用して、毎回ログイン情報を入力しないようにしています。したがって、更新をリポジトリからサーバーにプッシュすることは、文字通り「ワンタッチ」操作です。
このスクリプトで最も満足しているのは、最初は、グランドプロジェクトというよりもシェルスクリプトの練習であったことです。しかし、それはおそらく私に数え切れないほどの時間を節約し、ウェブサイトをほとんどストレスなしで更新する見込みを与えてくれます。私のコンピューターの他のソフトウェアよりも多分。
ファイルウォークを実行し、ディスク使用量でソートされたディレクトリツリーを出力するpythonスクリプト。
引数としてディレクトリを取り、再帰的にすべてのファイルを../dirname/DATE/TIME/にコピーするバージョン管理スクリプトがありました
明らかにそれは物事を行う安っぽい方法でしたが、実際のバージョン管理パッケージをインストールする前に便利でした。
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
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_();
}
Psの結果を簡単にグレーピングできるようにするスクリプト:
#!/usr/bin/php -f <?php $process = $argv[1]; echo Shell_exec("ps -ef | grep $process | grep -v grep"); exit(0);
ディレクトリに作成したばかりの最新のファイルを忘れてしまうことがありますが、lsコマンドはディレクトリ内のすべてのファイルを表示します。
ls -l -t | awk 'NR<15{print $0}'
(実際にはltというファイルにあり、.cshrcには次のように設定されています:alias lt '〜/ lt')
そのため、ここでいくつかのファイルのみを表示します。
ランダムタイマーのアラートボックスは、少なくとも1時間に1回ポップアップして、プッシュアップを行うことを思い出させます。
私は軍隊にいたときにそれを使いました。
また、私と他の人のためにアーキテクチャルール( http://architecturerules.org )を書きました。
役に立たないファイル名にも関わらず、約1万個のフォントを検索し、特定のキーワードを探すためのフォントについて十分に知っている小さなbashスクリプトを書きましたが、誤検出はあまり多くありません。ちょっとしたiMacで約1分間走りましたが、ここ数年でおそらく50時間も節約できました。
copy con c.bat
c:
cd\
cls
^Z
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
父親のルーターのIPアドレスを取得し、それを安全な場所にftpするためにcronジョブを作成しました。
これにより、大量のスペースを使用せずに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
#!/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
ハイブリッドの一種として機能します。sorts andは一度に人間が読めるサイズを提供します。ディスク容量を占有しているものを見つけるのに非常に便利です。
同じような調子で、
#!/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 | fit
またはls | fit -cdrw
を実行して、DVD/CD/CDRWに収まるかどうか、収まらない場合はどこに分割するかを判断します。
私はよくMS Wordマクロを使用します。これは、ソースコードファイルを取り、ランドスケープページの等幅タイプの2列にフォーマットし、行に番号を付け、ファイル名、印刷日、ページ番号などの会社のヘッダーとフッター情報を追加し、守秘義務声明。
ページの両面印刷では、同等のlpr
コマンドとして用紙の約1/4を使用します。 (誰でもlpr
を使用しますか????)
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 <[email protected]> #
##############################################
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()
Debianベースのシステム用の小さなシェルスクリプトtaptを作成しました。特にUbuntu。基本的には、すべての「apt-get」アクティビティをTwitterアカウントに投稿します。 Ubuntuシステムにプログラムをインストールしたり削除したりしたときの追跡をするのに役立ちます。このために新しいTwitterアカウントを作成し、非公開にしました。本当に便利です。詳細はこちら: http://www.quicktweaks.com/tapt/
Subversionにはその機能がないので、gitがいつ使用するかを判断する方法が好きなので、ページャーで色付きの出力を簡単に取得したいと思います。 cgrepエイリアスを使用すると、すぐに選択できます。それなしでは、生のカラー出力が得られることがあります。
また、コードをgrepするとき、.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'
猫箱/ 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
VPN接続を確立してから無限ループに入り、接続の反対側のマシンに5分ごとにpingを実行して、生成しない場合にVPNサーバーが非アクティブのために接続をドロップしないようにするバッチファイルがありますしばらくその接続を経由するトラフィック。
ダウンロードディレクトリにあるRakefileには、そのディレクトリから外部ドライブ上のそれぞれのメディアアーカイブにファイルをコピーするタスクが含まれています。私のインターネット速度とストレージ容量を考えると、hellanzbによってダウンロードされる(完全に合法的に、追加するかもしれない)すべてのメディアをコピーし、適切に名前を変更するだけでは、毎週数時間かかります。
同じファイルの別の非常に便利なタスクは、IMDBにログインして、私が持っているすべてのメディアのエピソードリスト/ディスコグラフィーのIMDBをスクレイピングし、NewzBinをチェックして、私が持っている穴を埋めるレポートを探します。
合わせて、これは私が絶対に何もする必要がないことを意味し、その代わりに、外付けハードドライブに座ってその日に消費できるよりも多くのメディアで毎朝目を覚まします。
これはすべて完全に上であって合法であると言いましたか? d-:
多分これをすべてコマンドラインのメディアマネージャー/プレーヤー(mplayerに依存する)にマージし、時間があればGitHubに公開します。
最高の実際のスクリプト?
Me:(部屋に入る)「ボス、レイズが欲しい」
ボス:(机の後ろから椅子を提供します)「昇給しますか?
繰り返しますが、それはworstスクリプトかもしれません!
毎朝実行するバッチファイルがあり、毎日確認したいすべてのサイトにロードされたタブでブラウザーを起動します(Woot、Dilbert、Doonesbury、UserFriendly;季節的に、NY Metsスコアとelectoral-vote.comに加えてメンバーシップをアクティブに保つために定期的にアクセスする必要があるいくつかのウェブサイト)
アニメ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)
[email protected]と[email protected] => hostsファイルを変更して、LANまたはWANアドレスを経由します。
まあ AutoHotkey キーボードだけの手の届くところに私の人生を作るスクリプト:
このキーボードスクリプトは、私をそのような幸せなキャンピングカーにしています。そして、autohotkeyはWindowsでのみ機能するため、実際には、Linuxの代わりにWindowsをプライマリプラットフォームとして使用しているのが主な理由です。
完成のために、これに対する自分の答えを含めるべきだと思います。
一緒に住んでいる2人の人の出費を考慮に入れ、月末にどの人がもう一方のお金を借りているかを計算して、各人が平等に過ごすようにする簡単なスクリプトを書きました。各経費のカテゴリを保存し、データベースに保存するように拡張する予定です。確かに、既存のソフトウェアを使用することもできます...しかし、その面白さはどこにありますか?
それほど複雑ではありませんが、確かに、自宅でよく使う仕事関連以外のスクリプトに関しては、これが現在のリーダーです。
alias snoot='find . ! -path "*/.svn*" -print0 | xargs -0 egrep '
pythonプログラムを作成して、アパートの共有支出を計算し、列にルームメイト、行に経費カテゴリ、各ルームメイトが家賃を支払う金額を調整した後、きちんとした小さなグリッドを出力しました共有費用に対する彼の貢献。しばらくこの方法を共有していましたが、月末に生の合計を合計するだけでした。もっときめ細かな制御が必要でした。行項目ごとに最大8つのキーストロークがあるため、これはExcelよりもはるかに優れています。私は、一人のルームメイトが私たちの予算の25%を飲料に費やしているという毎月の傾向をやめようと必死な探求を続けていました...