2012-01-18 21 views
12

我正在創建User類,其中一種方法是get_privileges();如何更改目錄中所有文件中所有文件的出現次數

後關上我的頭到鍵盤的時間,我終於發現,我是誰繼承了這個特定的數據庫先前編碼拼寫的單詞「特權」作爲MySQL數據庫「privelages」,從而也隨處可見在訪問這些「privelages」的數百個文件中,它是這樣拼寫的。

是否有Linux的一種方法(Ubuntu服務器),我可以經過的每一個地方在/var/www文件夾,並以「特權」替換「privelages」,這樣我就沒有處理有這個錯字和代碼嗎?

回答

27

的變化,考慮到子目錄(未經測試):

find /var/www -type f -exec sed -i 's/privelages/privileges/g' {} \; 

這將find/var/www下的所有文件(沒有目錄,由-type f指定),並執行sed命令,以便在找到的每個文件上用「特權」替換「privelages」。

+8

謝謝 - 對於BSD sed Mac上的人。您需要爲-i參數添加擴展名。 像這樣:'sed -i「」's/prive ...' – xer0x 2012-01-27 19:27:51

+0

如果您只想對包含拼寫錯誤的文件運行'sed'(如果您的項目包含數千個文件, ,你可以做'grep -l -r「privelages」/ var/www | xargs -I「@」sed -i's/privelages/privileges/g'@' – 2017-08-15 19:56:31

+0

使用grep然後sed可能比使用sed更糟,因爲它意味着打開並讀取每個文件兩次 – cegfault 2017-11-08 07:38:14

5

檢查了這一點:http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/

cd /var/www 
sed -i 's/privelages/privileges/g' * 
+0

非常感謝你,我很欣賞答案。 – 2012-01-18 05:52:21

+1

如果你想遞歸子目錄,你將需要添加一個'find',或者使用一個允許你在所有子目錄中對所有文件進行整合的shell(提示:'**/*'在某些shell中執行此操作)。這是一個常見問題;搜索類似的問題。同情你不得不應對一個文盲的前身... – tripleee 2012-01-18 06:04:24