[Powershell]符合條件的檔案備份,並將內容清空
需求說明
要將某個目錄底下,所有目錄裡面的所有符合條件的檔案,備份、記錄並清空原本檔案內容。條件有二:第一,特定副檔名。第二,檔案內容包含特定字串。
範例
#created by 91, 檢查路徑是否存在,若不存在則建立folder
function CheckFolderExist($path)
{
if ((Test-Path $path) -ne $true)
{
$o = mkdir $path
}
}
#檢查$path裡面所有副檔名為$extension的檔案,內容含有$pattern字串的檔案,按照其目錄結構備份到$backupPath,並將檔案清空
function DoStuff
{
param ($path, $pattern, $extension, $backupPath)
#透過-recurse 將$path底下所有目錄裡面,所有副檔名為$extension的檔案讀出來
$File = Get-ChildItem $path -include *.$extension -recurse
$StringVid = $pattern
foreach ($Entry in $File) {
#使用select-string -pattern,檢查檔案內容是否包含$pattern
$List = select-string -pattern $StringVid $Entry
if ($List.LongLength -gt 1) {
#目標檔案的目錄結構
$backupDirPath = $Entry.DirectoryName -replace [regex]::Escape($path) , ""
$backupDes = $backupPath + $backupDirPath + "\"
CheckFolderExist $backupDes
$Entry.FullName >> $backupPath\BouncerFileList.txt
cpi $Entry $backupDes
#清空原本檔案內容
Set-Content $Entry.FullName ""
}
}
}
$path = "C:\MyHtmlFolder" #檢查目標路徑
$pattern = "不該出現的網頁內容" #網頁內容pattern
$extension = "html" #副檔名
$backupPath = "C:\backup" #備份路徑
DoStuff $path $pattern $extension $backupPath
結論
一樣,只是memo一下一些相關的語法,加上大家可能在管理file server上,可能需要定時的清理一下log檔或針對特殊內容的檔案進行處理。所以記錄一下,寫法還很C#,不太Shell,請海涵。若有建議的寫法,也請不吝賜教。
blog 與課程更新內容,請前往新站位置:http://tdd.best/