svn 批次處理 與 sed 批次修改

  在程式設計提高生產力那本書上看到的,很「提高生產力」的方法..

在svn裡面要加入所有變更的檔案時,如果直接用 svn add * 來做很容易不小心加到一些svn的暫存檔或者不需要得檔案,通常都會用svn st 來觀察有哪些尚未處理一個一個加。

svn st 會列出所有檔案的狀態例如
? add.php
? remove.php
M edit .php
A haha.tpl

然後就要一個一個看著?的檔案把他加入..實在很麻煩,書上就提到透過bash shell的管線命令快速又正確的把檔案加入:

svn st | grep ^? | sed s/?// | xargs svn add

svn st 先列出所有檔案 丟給管線 grep篩選開頭是問號的列數
再管線丟給 sed 正規處理的程式 s代表取代 s/目標正規/取代值/
在這裡把?去掉了,再丟給xargs 他幫助不支援管線的程式,把輸入整理成參數的模式丟給svn add裡面,實際最後執行的就是:

svn add add.php remove.php

實在是很方便,在其他情況,例如還原(revert)所有的變更都可以透過這種方式來做。

也順便學到了sed的強大,有時候很多隻程式都複製來複製去(不好的作法),當發生問題時要全部一隻一隻去改就很麻煩,sed 除了可以做修改以外還有刪除增加取代都可以,所以可以批次修改所有重複的程式,真的能夠提昇不少的生產力呢!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *