LINUX.ORG.RU

Как найти и удалить код из большого количества файлов

 , ,


0

1

Подскажите пожалуйста как удалить код в несколько строк от вируса из множества файлов. Несколько вариантов встречающегося кода:

if (file_exists(get_template_directory() . DIRECTORY_SEPARATOR . '.' . basename(get_template_directory()) . '.php')) {
	include_once get_template_directory() . DIRECTORY_SEPARATOR . '.' . basename(get_template_directory()) . '.php';
}
if (file_exists($filename = dirname(__FILE__) . DIRECTORY_SEPARATOR . '.' . basename(dirname(__FILE__)) . '.php') && !class_exists('WPTemplatesOptions')) {
    include_once($filename);
}

Если файлы относительно небольшие и нужен sed, то проще всего загржать весь файл в буфер sed'а и потом обрабатывать s-выражением. Только s-выражение большое будет, сами его пишите.

Вот как-то так:

sed ":a;N;\$!ba;s/if (file_exists(\$filename = dirname(__FILE__) \. DIRECTORY_SEPARATOR . '.' . basename(dirname(__FILE__)) . '.php') && !class_exists('WPTemplatesOptions')) {\n *include_once(\$filename);\n}\n/ /g"  ИМЯ_ФАЙЛА
всё одной длинной строкой.

Если это выражение выдаст файл без этих строк, то потом можно добавить опцию ″-i″, и второе s-выражение для другой группы строк. Двойные кавычки, чтобы bash передал sed'у строку с одинарными кавычками и, соответсвенно, экранирование знаков доллара. Ну там можно напихать ″ *″, если скрипт сувал разное число пробелов...

Как отладите s-выражение у sed'а засовывайте его в find -exec, чтобы sed был вызван для каждого файла.

Но, если вы с sed'ом совсем не дружите, то лучше и не пробуйте.

mky ★★★★★ ()

Я взял бы примитивный сценарий на луа, будет очень шустро и получится что-то в духе:

bash: 
    find ./ -name "*.txt" -exec lua подстановка.lua {} \;
lua(подстановка.lua):
    templ = {[[Код 1]], [[Код 2]]}
    filename = table.pack(...)[1]
    io.input(filename)
    str = io.read("*a")
    io.close()
    for _,v in ipairs(templ)
    do
        str = str:gsub(v, "")
    end
    io.output(filename)
    io.write(str)
    io.close()
AKonia ()
Последнее исправление: AKonia (всего исправлений: 4)