[英]Searching all files in directories and sub-directories that contain specific string and remove string
我的 Web 服務器上的許多 PHP 文件已被盜用。 我需要找到有問題的那些並刪除問題代碼。 手動操作太費時間了。
計划是提供頂級目錄並讓控制台應用程序搜索該目錄中的所有文件(包括子目錄中的文件)並刪除每個文件中的行。
我的代碼在下面,它可以工作,但它似乎沒有查看所有目錄。 文件已正確更新,但子目錄中的文件未正確更新。 我不確定我哪里出錯了。 任何援助將不勝感激。
public static string check_path = string.Empty;
public static string log_folder = string.Empty;
public static string extension = string.Empty;
static void Main(string[] args)
{
if (args == null || args.Length < 1)
{
Console.WriteLine("Invalid Syntax");
return;
}
else
{
shakaka(args[0]);
}
}
public static void shakaka(string check_fol)
{
if (Directory.Exists(check_fol))
{
string[] folders = Directory.GetDirectories(check_fol);
foreach (string folder in folders)
{
string[] files = Directory.GetFiles(folder);
foreach (string file in files)
{
extension = Path.GetExtension(file);
if (extension == ".php")
{
var oldLines = System.IO.File.ReadAllLines(file);
var newLines = oldLines.Where(line => !line.Contains("/*457563643*/"));
System.IO.File.WriteAllLines(file, newLines);
Console.WriteLine("Updated: " + file);
}
else
{
Console.WriteLine("Not a PHP File: " + file);
}
}
}
}
else
{
Console.WriteLine("Directory Doesn't Exist: " + check_fol);
}
}
}
您必須做的是,正確使用接受三個參數的重載方法Directory.GetFiles()
。 即, 字符串路徑、字符串 searchPattern、System.IO.SearchOption searchOption
修改后的代碼將是這樣的:
string[] files = Directory.GetFiles(folder,"*.php", System.IO.SearchOption.AllDirectories);
這里
第一個參數(路徑)指定要搜索的目錄的相對或絕對路徑。 此字符串不區分大小寫。
第二個參數(searchPattern) 匹配路徑中文件名的搜索字符串。 此參數可以包含有效文字路徑和通配符(* 和 ?)字符的組合,但它不支持正則表達式。 *在你的情況下,你只需要
.php
文件,所以它應該是*.php
而最后一個參數 (SearchOption) 是一個枚舉值,指定搜索操作應該包括所有子目錄還是只包括當前目錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.