批量修改子目錄下所有文字檔案的指定內容(兩種方案)

2021-09-12 12:16:41 字數 1455 閱讀 2914

任務背景:因工作需要把大量生產系統下的.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....