你電腦上跑著哪些好玩腳本?
根據自己的需求實現的小腳本(shell、python等等編程語言的)或bat。
大家在分享思路的同時,最好可以上代碼 :)
太多了,隨便說幾個,代碼就不貼了:
1. 控制房間里兩個wifi插座/開關通斷的腳本,一開始是python的(基於ouimeaux),後來改成了C++(基於openhome/ohNet),還寫了一個常駐後台的服務端來增加穩定性。有次開放了一個埠讓地球對面的人把我房間的燈關了。
2. 我房間的桌上和床頭各有一個音箱,於是寫了個程序來切換音頻播放設備,一開始寫了個powershell腳本,後來嫌powershell啟動太慢就寫了一個調windows API的C++版的,發現微軟居然故意不公開這個API(防止程序們亂搶),於是用了一些Undocumented API。
3. 小區洗衣房是公共的,寫了一個python小程序來抓洗衣機/烘乾機的工作進度,洗完了自動提醒我去拿。
4. 寫過一個財務管理程序,用來登陸各種網銀賬號/股票賬戶/養老金賬戶等等,匯總所有的存款/信用卡/理財信息/信用分數等等,給自己沒事兒數錢玩。這玩意兒是基於python上的一個動態爬蟲spynner寫的。後來知道了有mint這種東西...
5. 知乎精選評論還原器和逆向交集,放到專欄里去了,需要請自取。另外自己還寫了一些知乎爬蟲,站在數據背後看世界是挺有意思的。
6. 有段時間家裡老斷網,於是寫了一個網路狀態監測的小東西,最後改成了在路由器上配置了一套基於collectd+rrd的監測系統,能自動畫成圖表給我看。
再來更新一個
0.給一個指定郵箱發一封郵件,電腦就默默自動關機。代碼在update0裡面
PS:有人說意義何在,
︿( ̄︶ ̄)︿要從實驗室滾回寢室,但是電腦上好多非監督的任務還沒完成(虛擬機裡面裝軟體),那就發一封定時關機郵件;
︿( ̄︶ ̄)︿晚上被慫恿去外面吃飯,心想著還要回實驗室碼一會代碼來著,可是吐了,直接滾回寢室,那麼就讓它自動關機
︿( ̄︶ ̄)︿評論說的家裡面電腦任務差不多了,就讓電腦關機了。
︿( ̄︶ ̄)︿其實想讓電腦關機是次要的,還可以讓它突然間唱歌什麼的,會不會把單獨在實驗室的小師妹嚇到哦。
︿( ̄︶ ̄)︿其實有了這種思路,再寫比如,「在人人上面發一首歌的狀態,就讓電腦自動放」這種代碼就so easy了。
1.抓取京東商品價格,如果比昨天的價格降低10%那麼就把商品鏈接發到指定郵箱。
這個的意義就不說了吧,哈哈哈哈。
---------------------------------
update0:
先用我的常用郵箱給我備胎郵箱發送一封主題為「shutdown」的郵件
然後我要關機的電腦檢測到了自動關機並發揮一封主題為「already shutdown」的郵件
然後我要關機的電腦檢測到了自動關機並發揮一封主題為「already shutdown」的郵件原理:我要關機的電腦腳本不斷檢測我的備胎郵箱是否有「shutdown」主題的來自我常用郵箱的郵件,如果有則返回一封「已經關機」的郵件給我常用郵箱,並且自己給自己發一封主題為haha的郵箱,從而避免下次一打開腳本就關機。(時間神馬的都可以自己設定,我設定的比較短)
代碼如下:
#coding:utf-8
#python 3.4
#author yinruyi
#email yinruyi.hm@gmail.com
import poplib,email
from email.header import decode_header
import smtplib
import time
import os,sys
def accp_mail():
host = "pop3.sina.com"
username = "yinruyi233@sina.com"#關機郵箱
password = "233333333"#郵箱密碼
pp = poplib.POP3(host)
pp.set_debuglevel(1)
pp.user(username)
pp.pass_(password)
ret = pp.stat()
ret = pp.list()
down = pp.retr(len(ret[1]))
a=down[1][10].decode("utf-8")
b=down[1][33].decode("utf-8")
if a!="X-Sender: ruyi.yin@qq.com":#我常用的郵箱
pass
else:
if b=="Subject: shutdown":#發送關機主題
#depend on the down itself
return 0
pp.quit()
def send_mail():
handle = smtplib.SMTP("smtp.sina.com", 25)
handle.login("yinruyi233@sina.com","233333333")#關機郵箱帳號和密碼
msg = "To: yinruyi233@sina.com
From: yinruyi233@sina.com
Subject: haha
start
"
#從關機郵箱到關機郵箱主題為haha的郵件
handle.sendmail("yinruyi233@sina.com","yinruyi233@sina.com", msg)
#發送
handle.close()
def send_mail1():
handle = smtplib.SMTP("smtp.sina.com", 25)
handle.login("yinruyi233@sina.com","23333333")#關機郵箱帳號和密碼
msg = "To: ruyi.yin@qq.com
From: yinruyi_hm@sina.com
Subject: already shutdown
start
"
#從關機郵箱到常用郵箱主題為已經關機的郵件
handle.sendmail("yinruyi_hm@sina.com","ruyi.yin@qq.com", msg)
handle.close()
if __name__=="__main__":
while 1:
time.sleep(5)
if accp_mail()==0:
#print("just success")
send_mail()
#讓關機郵箱自己給自己發一封不同於shutdown的郵件
send_mail1()
#讓關機郵箱給自己的常用郵箱發一封已經關機的郵件
os.system("shutdown -f -s -t 10 -c closing...")
#關機
break
電腦上長跑的程序基本沒有,因為不能保證 24 小時處於開機狀態,但是 VPS 上倒是跑了很多有意思的小程序。
1. 監控 1024 的貼圖模塊,並抓取所有新增圖片圖片聚合到了 zhihu.photo,不過為了我的安全,我並沒有將訪問鏈接暴露出來,如果你想玩,可以自己去 fork 我的代碼,並做對應的調整。
- 所有代碼:https://github.com/xlzd/zhihu.photo
- 1024 爬蟲代碼:zhihu.photo/t66y_crawler.py at master · xlzd/zhihu.photo · GitHub
2. 微博報時
每個整點自動發微博報時,順便發一張圖片。
代碼:xPyToys/weibo_baoshi.py at master · xlzd/xPyToys · GitHub
效果:
3. 通過微博控制電腦
發一條微博,內容為一條指令。電腦端監控我的微博,並自動執行命令,然後將結果作為評論回復到當條微博下。
4. 租房網站信息監控
之前有段時間需要租房,所以監控了趕集、58 和豆瓣的租房信息,當目標地區、目標小區的個人房源有更新之後,就立刻發郵件通知我。
5. bing 首頁圖片下載並自動上傳七牛
代碼:xPyToys/down_bing_bg.py at master · xlzd/xPyToys · GitHub
快速重啟路由器
家裡用的是D-link路由器,不超過100塊那種。由於路由器年代久遠,偶爾會抽風連不了外網,這時就需要重啟路由器。一般常規的做法一是斷電重啟;二是登陸路由器系統設置選項進行重啟。有時路由器離電腦太遠了不想跑過去斷電,登陸路由器又有點煩鎖,什麼打開瀏覽器輸入用戶名密碼找到系統設置選項再點擊重啟。於是就設想寫個python腳本,直接雙擊或者快捷鍵打開馬上重啟路由器。代碼如下:
import requests
ip="192.168.5.1"
username="admin"
pwd="123456"
header={
"Host": ip,
"Origin": "http://"+ip,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded",
"Accept":" */*",
"Referer": "http://"+ip,
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.8"
}
#登陸時向伺服器POST的數據
login={
"REPORT_METHOD":"xml",
"ACTION":"login_plaintext",
"USER":username,
"PASSWD":pwd,
"CAPTCHA":""
}
#重啟時向路由器POST的數據
reboot={
"EVENT":"REBOOT"
}
s=requests.session()
#登陸路由器
login=s.post("http://"+ip+"/session.cgi",data=login,headers=header)
print login.text
#重啟路由器
reboot=s.post("http://"+ip+"/service.cgi",data=reboot,headers=header)
print reboot.text
現在直接雙擊或者用快捷鍵打開這個文件就可以重啟路由器了。
--------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------
批處理快速更改ip地址
由於工作的關係,經常要在各種網路中切換。苦於windows更換ip地址的煩鎖
(什麼進入控制面板——網路和internet——網路和共享中心——理性適配器設置——然後找到網卡——進入屬性——然後internet 協議——更改ip信息——然後再確定確定確定)
很煩啊有木有(╯°Д°)╯︵ ┻━┻ 改的時間夠我喝杯茶了,實在受不了動手寫了一個批處理,然後將批處理設置一個快捷鍵。現在按兩三下鍵盤就可以輕鬆修改ip地址
這是筆記本上的批處理這是公司電腦的批處理:
批處理的快捷鍵可以通過生成快捷方式然後通過屬性設置
以下是批處理的內容,需要的可以自己拿去作相應的修改.
@echo off
goto menu
:menu
cls
@echo 1. 自動獲取ip地址
@echo 2. 手動輸入ip地址
@echo 3. 修改DNS
@echo 4. 修改ip為172.16.1.3
@echo 5. 修改ip為192.168.0.128 網關2
@echo 6. 修改ip為192.168.0.128 網關1
@echo 7. 查看本機ip地址
@echo 8. 退出
@echo.
@echo 默認修改ip為手動輸入[直接回車]
@echo.
@echo 請選擇
set selc=2
set /p selc=
@echo.
@echo 正在設置...
@echo.
IF %selc%==1 goto DHCP
IF %selc%==2 goto ipsetting
IF %selc%==3 goto DNS
IF %selc%==4 goto ipstatic2
IF %selc%==5 goto ipstatic
IF %selc%==6 goto ipstatic1
IF %selc%==7 goto ipconfig
IF %selc%==8 exit
IF %selc% NEQ 8 goto error
exit
:error
cls
goto menu
exit
:DHCP
@echo.
@echo 自動獲取ip地址
netsh int ip set add name="本地連接" source=dhcp
@echo 自動獲取DNS伺服器
netsh int ip set dns name="本地連接" source=dhcp
@echo 自動獲取ip地址設置完畢
@echo.
exit
:ipstatic
@echo.
@echo 設置為192.168.0.128
netsh int ip set add "本地連接" static 192.168.0.128 255.255.255.0 192.168.0.2 1
@echo 正在設置DNS伺服器:114.114.114.114
netsh int ip set dns name="本地連接" source=static 114.114.114.114
@echo 靜態ip設置完畢
@echo.
exit
:ipstatic1
@echo.
@echo 設置為192.168.0.128
netsh int ip set add "本地連接" static 192.168.0.128 255.255.255.0 192.168.0.1 1
@echo 正在設置DNS伺服器:114.114.114.114
netsh int ip set dns name="本地連接" source=static 114.114.114.114
@echo 靜態ip設置完畢
@echo.
exit
:ipstatic2
@echo.
@echo 設置為172.16.1.3
netsh int ip set add "本地連接" static 172.16.1.3 255.255.255.0 172.16.1.1 1
@echo 正在設置DNS伺服器:8.8.8.8
netsh int ip set dns name="本地連接" source=static 114.114.114.114
@echo 靜態ip設置完畢
@echo.
exit
:ipsetting
cls
@echo.
@echo 正在設置固定ip,請稍候……
@echo.
@echo 請輸入ip地址:
set /p ip=
@echo.
@echo 請輸入網關:
set /p gw=
@echo.
@echo 請輸入首選DNS:
set DNS1=114.114.114.114
set /p DNS1=
@echo 請輸入備用DNS:
set DNS2=8.8.8.8
set /p DNS2=
@echo.
netsh interface ip set address 本地連接 source=static addr=%ip% mask=255.255.255.0
netsh interface ip set address name=本地連接 gateway=%gw% gwmetric=1
netsh interface ip set dns 本地連接 static %DNS1%
netsh int ip add dns 本地連接 %DNS2% index=2
@echo ip地址設置完畢
@echo.
exit
:DNS
cls
@echo.
@echo 默認設置:首選DNS為114.114.114.114 備用DNS為8.8.8.8
@echo 若修改為默認設置,請直接回車;否則請輸入DNS
@echo.
@echo 請輸入首選DNS:
set DNS1=114.114.114.114
set /p DNS1=
@echo 請輸入備用DNS:
set DNS2=8.8.8.8
set /p DNS2=
@echo.
netsh interface ip set dns 本地連接 static %DNS1%
netsh int ip add dns 本地連接 %DNS2% index=2
@echo DNS設置完畢
@echo.
exit
:ipconfig
cls
ipconfig /all
@pause
goto menu
exit
--------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------
利用批處理登陸和註銷VPN
由於在家要vpn連回公司不定時加班〒▽〒 ,加上懶癌中後期不想移動右手用滑鼠點點點,於是寫了批處理加快捷鍵,一鍵登陸和註銷vpn
這是註銷vpn
至於vpn的腳本,前提是已經安裝vpn的客戶端cisco vpn client
以下是登陸vpn的腳本:
"C:Program Files (x86)Cisco SystemsVPN Clientvpnclient.exe" connect vpn_profile_name user username pwd password
@pause
以下是註銷vpn的腳本
"C:Program Files (x86)Cisco SystemsVPN Clientvpnclient.exe" disconnect
@pause
也來湊個熱鬧,自認為最有用的兩個Python腳本:
調用默認瀏覽器打開一坨網頁:
import webbrowser
urls = [
"http://www.douban.com",
"http://weibo.com",
"http://www.zhihu.com",
"http://www.v2ex.com/",
"https://github.com/",
"https://mail.google.com/",
"http://instagram.com/",
]
map(lambda x: webbrowser.open(x), urls)
扒取kindle今日特價書,把結果郵件到指定郵箱:
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import smtplib
from email.mime.text import MIMEText
from email.Header import Header
result = {"name": [], "cover": [], "desc": [], "link": [], "price": []}
def get_page():
return requests.get("http://t.cn/Rvm4xgc").text
def parse(html):
soup = BeautifulSoup(html)
table = soup.body.find_all("table")[6]
name = table.find_all("tr")[1]
result["name"].append(name.find_all("td")[0].b.string)
result["name"].append(name.find_all("td")[2].b.string)
desc = table.find_all("tr")[2]
book_1 = desc.find_all("td")[0]
result["cover"].append(book_1.a.img["src"])
result["link"].append("http://www.amazon.cn" + book_1.a["href"])
result["desc"].append(book_1.contents[1])
result["price"].append(book_1.find_all("p")[1].b.span.string)
book_2 = desc.find_all("td")[2]
result["cover"].append(book_2.a.img["src"])
result["link"].append("http://www.amazon.cn" + book_2.a["href"])
result["desc"].append(book_2.contents[1])
result["price"].append(book_2.find_all("p")[1].b.span.string)
mail_config = {
"from": "gitradar@163.com",
"to": "liushuaikobe1993@163.com",
"server": "smtp.163.com",
"username": "gitradar",
"pwd": "yourpassword"
}
def send_mail(sbj, content, from_whom=mail_config["from"], to_whom=mail_config["to"], server=mail_config["server"],
username=mail_config["username"], pwd=mail_config["pwd"]):
msg = MIMEText(content, "html", "utf-8")
msg["Subject"] = Header(sbj, "utf-8")
msg["From"] = from_whom
msg["To"] = to_whom
s = smtplib.SMTP(server)
s.ehlo()
s.starttls()
s.login(username, pwd)
s.sendmail(from_whom, to_whom, msg.as_string())
def build_html():
return "&&
+ "&
"+ result["name"][0] + "nbsp; " + result["price"][0] + "&
"+ "&"
+ "&&"
+ "&"
+ "&
" + result["desc"][0] + "&
"+ "&
"+ result["name"][1] + "nbsp; " + result["price"][1] + "&
"+ "&"
+ "&&"
+ "&"
+ "&
" + result["desc"][1] + "&
"+ "&&"
if __name__ == "__main__":
parse(get_page())
html = build_html()
sbj = "Kindle今日特價書"
send_mail(sbj, html)
我的算不上腳本,但解決了一個很鬱悶的問題。
有時code寫得正high,耳機里卻傳來了一首不搭的歌,實在不想切換到foobar換歌,就只能忍著,等她唱完。
後來用ahk寫了個腳本,不用切換,直接給背景窗口發消息。監聽快捷鍵,alt+x就是跳到下一首,並刪除當前這首,不用離開ide就能操作。
一天下來,播放列表中剩下的全是自己喜歡的歌。我還用它篩選整理歌曲,工作家務兩不誤。更新:虛擬出來的那個盤貌似是沒有回收站的,所以在虛擬盤中刪東西沒法從回收站恢復,也沒法在右鍵菜單中撤銷刪除。
=========================
以前的筆記本有兩塊硬碟,於是固態硬碟整個作C盤,裝各種軟體,機械硬碟整個作D盤,存儲各種大文件資料。
後來換了個輕薄本,只有一塊167GB的固態盤,整個作C盤。由於不想分區,就在C盤根目錄建了一個storage文件夾,所有大文件資料都放到這個文件夾里。但是每次找資料都要先進C盤,再進storage文件夾,很麻煩。最後寫了個windows批處理腳本,命名為「start.bat」扔到win7的啟動文件夾里::: 掛載存儲盤
subst d: c:storage
效果就是:
PS:默認情況下,虛擬出來的那個盤是無法手動修改卷標的,它總是跟主盤的卷標相同。但是如果把主盤卷標設置為空(虛擬盤也會自動變成空),那麼就會顯示默認卷標,而每個盤的默認卷標是可以在註冊表裡面設置的。設置方法就是把下面這段註冊表腳本保存為文件「label.reg」,然後雙擊運行。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerDriveIcons]
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerDriveIconsC]
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerDriveIconsCDefaultLabel]
@="win7x64"
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerDriveIconsD]
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerDriveIconsDDefaultLabel]
@="storage"
1. 一個日期計算器,算出今天是和女朋友在一起多少天,然後每天早上給女朋友自動發一條簡訊:
親愛的XX,今天是你掉入火坑的第XX天,快起床滅火了!
2. 京東等自動登錄簽到,每天5京豆么么噠
3.終端黑客帝國數字雨,把終端全屏可做屏保。(這個是在網上看到的,大家google digit rain等關鍵字就能找到)在bing每天都會更新背景圖片的啊,都是一些風景很贊的啊,於是我搞了個腳本每天去下載了啊
#!/bin/bash
pic_URL=`curl "http://cn.bing.com"|sed "s#{#
#g"|sed "s#}#
#g"|sed -n "/http.*jpg/p"|sed "s/url:/
/g"|sed "s/"/
/g"|grep ^http.*jpg`
echo $pic_URL
wget $pic_URL
然後扔到crontab中定時執行了
# m h dom mon dow command
0 2 * * */1 cd /home/li_yun/Pictures/bing_picture /home/li_yun/Pictures/bing_picture/down_pic.sh
當然,還有其他一些,在家裡電腦 上跑,如把路由器的動態IP發到公司的網路,去爬取網站的gif圖片什麼 的
應要求傳到github了,不太會,好折騰...
github:https://github.com/damonshi/12306
-------------------------------------------------------------------------------------------------------
自學python了一段時間,擼了個12306火車票余票全天候監控程序。
可以追蹤固定列車是否有票,一旦有立馬發郵件提醒。
可以追蹤固定列車固定座位類型是否有票,一旦有立馬發郵件提醒。
程序運行界面:
運行結果實例:
百度雲鏈接: http://pan.baidu.com/s/1kVwETgz 密碼: ae2p
程序源碼下載地址:
百度雲鏈接: http://pan.baidu.com/s/1dFoKiUd 密碼: 38q5
python懂的很淺很淺,無其他程序語言基礎,程序基本是靠著循環和判斷,不懂的問題靠谷歌搜索完成的,大神請輕拍。
shutdown -s -t 3600
因為MAC看B站彈幕各種發熱不能忍,所以平時準備了一大堆自己寫和改自github上的腳本。。比如:
bili+av號可以自動調用mpv載入彈幕本地觀看視頻,基本零功耗
biliurl+av號可以獲取下載地址【偶爾直接 you-get。。】
danmu+av號可以直接把彈幕轉成ASS文件命好名下載到桌面【出差什麼的在高鐵上可以準備一大堆視頻和彈幕下載好】
bgm命令可以顯示當日更新的新番,加上一些參數可以顯示三次元的,或者指定周X更新的番【特指新番】【我在alfred使用是直接將選中的番播放最近更新的一集或者將AV號複製到剪貼板,然後再調用上面的danmu命令】
danmu_delay xxx.ass可以將彈幕ASS文件延時【下下來的視頻如果跟B站上傳的不一樣(比如刪減過或者多了廣告之類的),就需要對一下彈幕時間軸,一般是ffmpeg直接修視頻,有次*.ts文件無論如何ffmpeg都失敗,就直接調整彈幕時間】【需求是推動XX的第一生產力。。】
vedio_merge:有些新番B站上不能播,所以上面的命令獲取不到視頻,所以可以安卓客戶端下載後,把下載的傳出來到電腦,因為是多個flv文件和彈幕xml,然後就自動拼接成一個視頻。。。
bhot:弄進alfred裡面,後面加參數,查看不同區不同日期的熱門。。
bl:弄進alfred直接搜索視頻,然後cmd+回車選中就是本地播放,ctrl+回車選中就是本地播高清,alt+回車直接下載到桌面
==========
各種腳本配合alfred簡直愉悅!!
放幾個演示吧,不過知乎不支持gif。。。我就放鏈接好了。。【GIF圖略大。。流量黨退散】
bgm獲取新番的最新一集地址,然後biliurl獲取下載鏈接,danmu可以下載彈幕到桌面:
http://kylen314.qiniudn.com/zhihu_1.gif
bgm獲取新番的最新一集地址,然後bili --hd本地載入彈幕視頻播放
http://kylen314.qiniudn.com/zhihu_2.gif
bl命令可以搜索視頻,然後bili --hd本地播放:
http://kylen314.qiniudn.com/zhihu_3.gif
bhot查看熱門視頻,依舊本地播放:
http://kylen314.qiniudn.com/zhihu_4.gif
===============
腳本可以在這裡找到。。。Vespa314/bilibili-api · GitHub
alfred的workflow可以在這裡找到。。但是需要別的配置。。。Vespa314/BilibiliAlfredWorkFlows · GitHub。。。【另外github README.md的圖片掛了。。不想管了。。別吐槽】
不保證你的用法和我一樣。。。因為很多命令我都是python寫的,放一個路徑,然後寫一個sh來調用,放在usrin,這樣就可以在任意路徑下用,然後sh外面再套一層alfred的workflow,這樣就不可不用開終端了。。
=============
唉。。。究竟是玩物喪志了還是人生苦短了?結果表明,給自己的需求和興趣寫代碼是________!!
最愛用的一些 bash alias (mac os x環境)
#查看當前ip
alias myip="ifconfig | grep inet "
#查看80埠佔用
alias ls80="sudo lsof -i:80"
#設置DNS
alias dnschk="networksetup -getdnsservers" #[service]
alias dnsset="networksetup -setdnsservers" #[service] [dns1] ([dns2]) ...
#可以結合常量使用,例如
export DNSV2EX="199.91.73.222 178.79.131.110" #V2EX DNS
#dnsset wi-fi $DNSV2EX
#Network Service
alias netsrv="networksetup -listallnetworkservices"
alias netsrvo="networksetup -listnetworkserviceorder"
alias netsrvpo="networksetup -listallhardwareports"
#文件許可權
alias cmod="sudo chmod -R 777"
alias cmod755="sudo chmod -R 755"
#bash_profile reload
alias rlbs=". ~/.bash_profile"
#新建並進入文件夾
function mcd() {
mkdir -p "$1" cd "$1";
}
#解壓,自動判斷壓縮文佳類型(忘掉冗長的 -zxvf... 吧)
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar e $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo ""$1" cannot be extracted via extract()" ;;
esac
else
echo ""$1" is not a valid file"
fi
}
#文件查找
ft() {
find . -name "$2" -exec grep -il "$1" {} ;
}
#文件查找刪除(小心使用通配符。。)
findremove() {
find . -name "$1" -exec rm -rf {} +;
}
各種 ls la l. 就不說了,太普遍了。
還有一大堆伺服器ssh也都配上alias了,配私鑰 ,ssh1, sshali, sshme 直接上。。非常方便。
#apache各種配置和日誌文件
alias apaconf="sudo vim /etc/apache2/httpd.conf"
alias apaconfp="sudo vim /private/etc/apache2/httpd.conf"
alias apaconfv="sudo vim /private/etc/apache2/extra/httpd-vhosts.conf"
alias apaelog="tail -r /var/log/apache2/error_log|less"
#git
alias gi="git init"
alias gib="git --bare init"
alias gaa="git add --all"
alias ga="git add "
alias gss="git status -s"
alias gs="git status"
alias glo="git log"
alias gloo="git log --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)&<%an&>%Creset" --abbrev-commit"
alias gc="git commit"
alias gf="git fetch"
alias gps="git push"
alias gpu="git pull"
alias gck="git checkout"
alias gb="git branch"
alias grmt="git remote"
alias gd="git rm --cached"
alias gdd="git rm"
alias gmg="git merge --no-ff"
alias gmm="git merge"
alias grb="git rebase"
alias gdf="git diff --cached"
alias gcl="git clone"
#Gruntjs 組件包安裝
grtinstallc() {
npm install grunt-contrib-"$1" --save-dev
}
還有好多就不複製上來了。總之極大提升工作效率。。
另外推薦一個專門收集alias的神站: alias.sh | Manage, share and source your aliases online.Unalias rm
Unalias mv
Unalias cp
印象筆記外鏈失效了,我已經將下載鏈接修改為百度雲的了。
========
運行著幾個AHK腳本,最常用的是滑鼠按鍵修改。另外還有一個AHK腳本自動運行管理器,是很久之前從網上找到的一個腳本管理器,然後修改過來的。
運行說明:
AHK腳本是 Auto Hotkey 腳本的簡稱,純文本文件,擴展名 .ahk ,是Windows環境下的一個開源腳本程序。若想運行AHK腳本,需要到 AutoHotkey 官網下載安裝AutoHotkey程序,之後就可以運行 .ahk 腳本了。
這個腳本管理器是我在小眾軟體上找到的,原地址:AHK Script Manager ,我在使用中又進行了一些修改。腳本管理器的作用就是啟動後運行它目錄下的其他ahk腳本,同時可以隨時啟動、關閉、編輯正在運行的腳本。
因為.ahk 腳本運行後,會產生一個autohotkey.exe進程,因此運行多個.ahk 腳本後,就沒有辦法知道到底哪個進程對應哪個腳本了,而腳本編輯器可以通過菜單關閉特定腳本對應的ahk進程。
腳本管理器運行後在托盤區產生一個圖標,滑鼠點擊可以彈出菜單。
腳本管理器運行後在托盤區產生一個圖標,滑鼠點擊可以彈出菜單。腳本管理器本身也是一個ahk程序,啟動後會運行/scripts 目錄下的所有ahk腳本,但是如果腳本文件名前面帶有「!」感嘆號,則不會自動運行,可以通過菜單運行。「關閉腳本」則自動結束對應的腳本進程,「編輯腳本」可以調用默認編輯器對腳本內容進行修改,方便調試,「重載腳本」用於修改腳本後重新載入新的腳本。
腳本管理器本身也是一個ahk程序,啟動後會運行/scripts 目錄下的所有ahk腳本,但是如果腳本文件名前面帶有「!」感嘆號,則不會自動運行,可以通過菜單運行。「關閉腳本」則自動結束對應的腳本進程,「編輯腳本」可以調用默認編輯器對腳本內容進行修改,方便調試,「重載腳本」用於修改腳本後重新載入新的腳本。「添加腳本」會自動打開/scripts 目錄,方便複製新的ahk腳本進去。「我添加了新腳本」則會重新運行/script 目錄下面的所有腳本,感嘆號開頭的除外。
「退出」是指推出腳本管理器,並不影響正在運行的ahk腳本。
下載地址:AHK Script Manager.zip_免費高速下載 (百度雲)
2、滑鼠按鍵修改
我的滑鼠滾輪按下去後經常沒有反應,因此我通過ahk腳本,將「先按下左鍵不放手,再按下右鍵」這個操作定義為滑鼠中鍵,在chrome中後台打開鏈接、關閉頁面非常方便。
AHK代碼非常簡潔:
~LButton RButton::
send {mbutton}
Return
另外我將滑鼠滾輪上下滾動相互調換,這樣的話,用完蘋果電腦再用Windows電腦再也不用糾結頁面滾動方向了,哈。
WheelDown::WheelUp
WheelUp::WheelDown
3、半透明播放器
這個功能在筆記本上邊看視頻邊刷網頁比較有用,現在雙屏後,我都是左邊屏幕看美劇,右邊屏幕刷知乎,於是很久沒有使用了。
因為我用的是 射手影音播放器,因此這個半透明播放器也只能將射手播放器半透明化。效果如下:(宅總你好~)
首先打開播放器的置頂功能,然後拖動窗口到合適位置,按下快捷鍵「Crtl+Shift+Z」會自動將射手播放器的窗口半透明化並
首先打開播放器的置頂功能,然後拖動窗口到合適位置,按下快捷鍵「Crtl+Shift+Z」會自動將射手播放器的窗口半透明化並滑鼠穿透,之後按住「Shift」鍵上下滾動滑鼠滾輪可以調節透明度,按快捷鍵「Ctrl+Shift+A」恢復成正常窗口。代碼如下:(比較亂)
#SingleInstance force ;強制重新載入新腳本
#NoEnv ;不檢測空變數為環境變數
#NoTrayIcon
Hotkey,~+WheelUp,ChTUp,off
Hotkey,~+WheelDown,ChTDown,off
Return
^+z::
Tran = 170
WinSet, ExStyle, +0x20,ahk_class MediaPlayerClassicW
WinSet,Transparent,170,ahk_class MediaPlayerClassicW
Hotkey,~+WheelUp,ChTUp,On
Hotkey,~+WheelDown,ChTDown,On
Return
^+a::
WinSet, ExStyle, -0x20,ahk_class MediaPlayerClassicW
WinSet,Transparent,255,ahk_class MediaPlayerClassicW
Hotkey,~+WheelUp,ChTUp,off
Hotkey,~+WheelDown,ChTDown,off
Return
ChTDown:
Tran := Tran - 5
If Tran &< 30
Tran = 30
WinSet,Transparent,%Tran%,ahk_class MediaPlayerClassicW
Return
ChTUp:
Tran := Tran + 5
If Tran &> 255
Tran = 255
WinSet,Transparent,%Tran%,ahk_class MediaPlayerClassicW
Return
修改上面代碼中的「ahk_class」可以透明其他播放器。
4、參考文獻條目自動生成這個是畢業論文時寫的一個簡單的小程序,可以自動生成參考文獻條目,省得自己寫忘掉逗號什麼的。
源代碼和編譯好的exe文件下載:
源代碼和編譯好的exe文件下載:參考文獻條目自動生成器.zip_免費高速下載 (包括 .ahk 和 .exe 文件)
好久沒有折騰腳本了,就這些。以前用windows跑著幾百行ahk腳本,包括各種快捷鍵,不過現在換ubuntu似乎用不著了。
實驗室一台機器跑著一個代理下載加速服務(golang,勉強算腳本),一個http文件伺服器(也是golang,以前用python的似乎跑不滿帶寬),一個自動翻牆代理。
一台伺服器跑著一個ssh隧道埠映射腳本,幾個資料庫自動備份腳本。
自己電腦幾個git,fabic的上傳,部署腳本。
路由器跑著一個定時重啟腳本。
如果說兩個月前的話我還跑一個監測伺服器的腳本,那個是真·24 小時不關,但是後來部署了自動化監測我就不跑了……
然後是生成 http://typeof.net(現在放 @Thomas Yao 的 gitcafe 上,因為賣 vps 的那傢伙倒閉了)中所有 html 的腳本,用 PatEL 寫的,寫完文章就 ninja 一下。
# Promise polyfill
set [[lambda [] this]].Promise [require "bluebird"]
define util [require "util"]
define co [require "co"]
define fs [require "mz/fs"]
define exec [require "mz/child_process"].exec
define [te s] : ["" + s].trim |.replace [regex "^" "gm"] [indents layer] |&> (+) "
" |&> process.stderr.write
define indents : let [cache ()] : lambda [n] : piecewise {
[n &<= 0] ""
cache`n cache`n
true [set cache`n [[Array n].join " "]]
}
define [GeneratorFunction fn] : begin {
set fn.constructor (.name "GeneratorFunction")
return fn
}
define [items-of list] : begin {
local len list.length
local j 0
while [j &< len] : begin {
yield list`j
inc j
}
}
define [keys-of obj] [items-of [Object.keys obj]]
define [pairs-of obj] : foreach [local k] [keys-of obj] : yield (obj`k k)
define GeneratorFunction [parallel thunks nThreads] : begin {
local ret ()
local index 0
local n [Math.min nThreads thunks.length]
define GeneratorFunction [next] : begin {
local i [[inc index] - 1]
set ret`i [yield thunks`i]
if [index &< thunks.length] : yield next
}
local threads ()
for [local j 0] [j &< n] [inc j] : threads.push next
yield threads
return ret
}
define layer 1
define [weave a f] : begin {
local r (.)
local n 0
for [local i 0] [i &< a.length] [inc i] : begin {
local x a`i
local y [f x]
if y : begin {
set r`x y
inc n
}
}
if n [then r] [else null]
}
define [getContent d] : weave [fs.readdirSync d] : lambda [n] : begin {
local p [d + "/" + n]
piecewise {
[[regex "^."].test n] null
[[fs.lstatSync p].isDirectory] : getContent p
[[regex ".yk$"].test n] p
true null
}
}
define contents [getContent "."]
define forceQ [process.argv`2 == "force"]
define dirConfigs (.)
define forceForFile (.)
define GeneratorFunction [compileOneFile id callback] : begin {
return : yield : exec ["yki -f " + id]
}
define GeneratorFunction [compileDir dir path] : begin {
if dirConfigs`path : return : yield : dirConfigs`path dir path
te ["Enter " + path]
inc layer
local tasks ()
foreach [local j] [keys-of dir] : piecewise {
[[typeof dir`j] == "string"] : let [file dir`j] [htmlPath [dir`j.replace [regex ".yk$"] ".html"]] : tasks.push : GeneratorFunction : lambda [] : piecewise {
[forceQ || forceForFile`file || [not [fs.existsSync htmlPath]] || [[yield [fs.stat file]].mTime &>= [yield [fs.stat htmlPath]].mTime]] : begin {
local compileResult : yield : compileOneFile file
te compileResult`1
}
true : te ["Unmodified: " + file]
}
true : yield : compileDir dir`j [path + j + "/"] forceQ
}
yield : parallel tasks 32
dec layer
te ["Leave " + path]
}
define GeneratorFunction [compileArticlesDir dir path] : begin {
te ["Enter " + path]
inc layer
local tasks ()
local meta (.)
if [fs.existsSync [path + ".meta.json"]] : set meta : JSON.parse : yield : fs.readFile [path + ".meta.json"] "utf-8"
foreach ([local f], [local j]) [pairs-of dir] : if [j != "index.yk"] : if [[typeof dir`j] == "string"] {
then : let [file f] : tasks.push : GeneratorFunction : lambda [] : begin {
local htmlPath [file.replace [regex ".yk$"] ".html"]
piecewise {
[forceQ || forceForFile`file || [not [fs.existsSync htmlPath]] || [[yield [fs.stat file]].mTime &>= [yield [fs.stat htmlPath]].mTime]] : begin {
local compileResult : yield [compileOneFile file]
te compileResult`1
set meta`file : JSON.parse compileResult`0
set meta`file.gtime [new Date]
}
[[not meta`file] || [not meta`file.gtime] || [new Date meta`file.gtime] &< [yield [fs.stat htmlPath]].mtime] : begin {
te ["Update Metadata: " + file]
local m : [yield [fs.readFile htmlPath "utf-8"]].match [regex "&s*$"]
if m : begin {
set meta`file : JSON.parse : [Buffer m`1 "base64"].toString
set meta`file.gtime : new Date
}
}
true : te ["Unmodified: " + file]
}
}
else {
yield : compileDir f [path + j + "/"] forceQ
}
}
yield : parallel tasks 32
yield : fs.writeFile [path + ".meta.json"] [JSON.stringify meta]
local indexMeta : yield : compileOneFile dir`"index.yk"
yield : fs.writeFile [path + ".index.meta.json"] indexMeta`0
dec layer
te ["Leave " + path]
}
set dirConfigs."./c/" compileArticlesDir
set dirConfigs."./m/" compileArticlesDir
set dirConfigs."./s/jsmech/" compileArticlesDir
set forceForFile."./index.yk" true
set forceForFile."./rss.yk" true
set forceForFile."./all.yk" true
define GeneratorFunction [main] : begin {
local startTime [new Date]
te "Compiling typeof.net"
yield : compileDir contents "./"
te ["Done in " + [[new Date] - startTime] / 1000 + " seconds"]
}
[co main].then [lambda [] null]
Update: support Windows OS X
================================================
自寫自用小腳本,網易雲音樂聽過的歌有緩存以後可以轉成 mp3 格式放在桌面 Music 文件夾內。
文件名是亂的也懶得改,反正雙擊加進 iTunes 裡面都是正確的。
# -*- coding: utf-8 -*-
import os
import platform
import getpass
import shutil
def getCachePathByName(uname):
if platform.system() == "Darwin":
return "/Users/" + uname + "/Library/Containers/com.netease.163music/Data/Library/Caches/online_play_cache"
elif platform.system() == "Windows":
return "C:\Users\" + uname + "\AppData\Local\Netease\CloudMusic\Cache\Cache"
else:
print "OS Not Supported"
return ""
def getDesktopPathByName(uname):
if platform.system() == "Darwin":
return "/Users/" + uname + "/Desktop/Music"
elif platform.system() == "Windows":
return "C:\Users\" + uname + "\Desktop\Music"
else:
return ""
def run():
username = getpass.getuser()
neteasePath = getCachePathByName(username)
try:
os.chdir(neteasePath)
for fileName in os.listdir("."):
portion = os.path.splitext(fileName)
if portion[1] == ".uc!" or portion[1] == ".uc":
desktopMusicPath = getDesktopPathByName(username)
if os.path.exists(desktopMusicPath) == False:
os.mkdir(desktopMusicPath)
shutil.copyfile(fileName, os.path.join(desktopMusicPath, fileName))
mp3Name = portion[0] + ".mp3"
os.rename(os.path.join(desktopMusicPath, fileName), os.path.join(desktopMusicPath, mp3Name))
print fileName + " -&> " + mp3Name
print "操作完成!"
usrClear = raw_input("是否需要清理網易雲音樂緩存?(y/n)")
if usrClear == "y":
for anyFile in os.listdir(neteasePath):
os.remove(anyFile)
print "清理完成"
else:
print "進程結束"
except:
print "Failed: 獲取網易雲音樂路徑失敗"
if __name__ == "__main__":
run()
教師一鍵評測
湊個熱鬧,不用Windows很久了。
這是當年在獵豹wifi這類工具出現之前我用的一個批處理。當有人問我怎麼開WIFI共享的時候我就把這個丟給他,直到獵豹這類工具的出現...
不過用這個也挺方便的,完全綠色無公害,有潔癖的同學可以留著用。
這個批處理用於建立wifi,其實這是Windows自帶的功能,Windows上所有的wifi共享工具都是利用這個原理。腳本內有說明,我就不廢話了。
使用說明:
複製以下內容打開記事本,粘貼,然後保存為xxx.bat的文件,然後在圖標右鍵以管理員身份運行即可。
PS:發現有些#沒有對齊,自己來吧
@echo off
mode con: cols=80 lines=28
color 17
title Win7/8無線Wifi Powered By DropFan
:main
color 17
cls
echo ############################################################################
echo ## ##
echo ## Win7/8無線熱點 By 老虎 ##
echo ## ##
echo ## 開啟wifi熱點--1 ##
echo ## 關閉wifi熱點--2 ##
echo ## 建立無線熱點--3 ##
echo ## 一鍵建立熱點--0 ##
echo ## ##
echo ## 一鍵開啟將默認建立SSID為WIFI密碼123456789的熱點並退出本程序。 ##
echo ## ##
echo ############################################################################
echo 運行本工具需要管理員許可權,請在圖標右鍵選擇"以管理員身份運行"
echo 本工具不支持XP以前系統,僅支持WinNT 6.x以後的版本(vista win7/8/8.1等)
echo Tips:
echo Vista之後Windows內置了WIFI共享功能,本工具就利用此命令建立熱點。
echo 創建完畢後,在已連接Internet的網路設置打開Internet共享即可共享網路。
echo Win7/8所有開啟熱點的無線共享工具均利用此原理,本工具也不例外。:D
echo 真乃居家旅行殺人越貨必備工具,歡迎收藏。
echo By 老虎
set /p option=請輸入相應選項,輸入q則退出:
@echo off
if "%option%"=="1" goto start
if "%option%"=="2" goto stop
if "%option%"=="3" goto set
if "%option%"=="0" goto onekey
if "%option%"=="q" goto exit
if "%option%"=="main" goto main
:start
echo 如果卡住請稍等,Windows正在後台處理...一直卡住請稍後重新運行本工具
netsh wlan start hostednetwork
echo 請按任意鍵返回主界面...
pause&>nul
goto main
:stop
echo 如果卡住請稍等,Windows正在後台處理...一直卡住請稍後重新運行本工具
netsh wlan stop hostednetwork
echo 請按任意鍵返回主界面...
pause&>nul
goto main
:exit
echo 感謝您的使用,本工具即將退出。
echo 如有任何問題請聯繫本人。
echo 再次感謝您的使用!:D
echo 5..
echo 4..
echo 3..
echo 2..
echo 1..
echo 如果你能看清這幾行字,說明你的電腦有些卡。- -!
exit
:set
set /p ssid=請輸入要建立的熱點名稱(SSID):
set /p key=請輸入要建立的熱點密碼(8位以上):
echo 如果卡住請稍等,Windows正在後台處理...一直卡住請稍後重新運行本工具
netsh wlan set hostednetwork mode=allow ssid="%SSID%" key="%key%"
echo 建立完畢,若顯示以下三條信息則建立成功。
echo -----承載網路模式已設置為允許。
echo -----已成功更改承載網路的 SSID。
echo -----已成功更改託管網路的用戶密鑰密碼。
echo 若返回其它結果請自行上網查詢。
echo 請按任意鍵返回主界面...
pause&>nul
goto main
:onekey
netsh wlan set hostednetwork mode=allow ssid="WIFI" key=123456789
netsh wlan start hostednetwork
exit
推薦閱讀: