任務背景:因工作需要把大量生產系統下的.log檔案發外進行分析,總資料量接近1t,單個檔案大小約為1g。為了防止生產引數洩露,需將檔案中指定內容修改為'***'以遮蔽敏感資訊。
應用技術:shell、sed、python、threading多執行緒
>> cat rep_text.sh
#!/bin/bash
#this is a script for replacing contents in log.
function list_allfile() ];then
list_allfile $1"/"$
else
f_list[i]=$1"/"$
let i++
fidone
}i=0 #初始化陣列下標
list_allfile $1
for f in $ #sed批處理
do echo -n $f resolfing...
sed -i "s/aaa.bbb.ccc/x.x.x/" $f
echo [ok]
done
import os
import threading
def rep_text(rep_file): #替換文字函式
with open(rep_file, 'r') as fobj:
lines = fobj.readlines()
with open(rep_file, 'w') as fobj:
for line in lines:
rs = line.rstrip()
newname = rs.replace('aaa.bbb.ccc', 'x.x.x')
fobj.write(newname+'\r\n')
if __name__ == '__main__':
dirpath = "f:/test"
rep_file_list =
for root, dirs, files in os.walk(dirpath): #遞迴獲取dirpath目錄下所有檔案,儲存在列表rep_file_list
for name in files:
for rep_file in rep_file_list: #多執行緒批量處理
t = threading.thread(target=rep_text, args=(rep_file,))
t.start()
注意:rep_text函式中,通過 fobj.readlines() 方法將1g的檔案內容一次性讀取到列表中,需要考慮系統本身記憶體的容量;若檔案過大,可以考慮 fobj.readline() 分行處理,但讀/寫的物件不能是同乙個檔案。 c 遍歷目錄下所有子目錄及檔案
include include include include include using namespace std 其實兩個字串連在一起比如string可惜寫成 str1 str2 獲取所有的檔名 void getallfiles string path,vector files else 如果...
合併子目錄下的檔案
比如在當前路徑下有這麼乙個檔案系統 0 mytest.en 1 mytest.en 2 mytest.en 3 mytest.en 4 mytest.en 5 mytest.en 6 mytest.en 7 mytest.en 8 mytest.en要把所有的mytest.en貼上到同乙個檔案內,可...
MFC遞迴遍歷目錄下所有子目錄和檔案
在mfc下要實現資料夾的遞迴遍歷,可用cfilefind類,依次讀取資料夾下的子資料夾和檔案,並判斷通過判斷是資料夾還是檔案來決定遞迴遍歷 事實上,cfilefind本身還可以判斷檔案具體屬於哪種型別,例如壓縮檔案 系統檔案等 另外要注意,遍歷過程中會讀到 檔案和 檔案,可通過filefinder....