|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 63844.6180 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
03.12.2009, 18:58
|
#1
|
Senior Member
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44010
|
Скрипт поиска и замены в файлах
Помогите, плз, со скриптом.
Скрипт ищет в папке, куда его залили и во всех вложеных папках, файлы с определенным расширением (html, htm, php - к примеру), ищет в этих файлах определенную фразу и заменяет ее другой (к примеру domain1.org на domain2.info).
|
|
|
03.12.2009, 19:03
|
#2
|
Синьор
Регистрация: 30.05.2008
Сообщений: 975
Бабло: $153121
|
Как-то так
PHP код:
<?
$work_dir="./";
// рабочая директория - обязательно должна заканчиваться
// символом "/"
$excl_dir=array();
$excl_dir[0]="./no_work_here/";
$excl_dir[1]="./and_here/and_here/";
// директории, где поиск/замена не производятся - обязательно должны заканчиваться
// символом "/"
$file_mask_1=".html";
$file_mask_2=".js";
// маски обрабатываемых файлов (будут обработаны все файлы,
// содержащие данную строку в имени)
$search_str="test"; #что ищем
$replace_str="TEST"; #чем заменяем
//******************************************************
$level=0;
function sr($dir)
{
global $level,$file_mask_1,$file_mask_2,$search_str,$replace_str,$excl_dir;
echo "<b>";
for ($i=0;$i<$level;$i++) echo "* * ";
echo $dir."</b>";
if (@in_array($dir,$excl_dir))
{
echo " - needn't search & replace<br>";
return;
}
echo "<br>";
$p = dir($dir);
while($ent=$p->read())
{
if ($ent!="." && $ent!=".." && !is_dir($dir . $ent) && (eregi(sql_regcase($file_mask_1),$ent) || eregi(sql_regcase($file_mask_2),$ent)))
{
$tmp=@file($dir.$ent);
$str=@implode("",$tmp);
if (strpos("@!#%xrenoder^&*()".$str,$search_str))
{
for ($i=0;$i<($level)+1;$i++) echo "* * ";
echo $dir.$ent." found...";
$str=str_replace($search_str,$replace_str,$str);
if ($fp=@fopen($dir.$ent, "w"))
{
flock($fp,LOCK_EX);
fwrite($fp,$str);
fclose($fp);
echo " and replace<br>";
}
else echo " and <b>can't replace</b><br>";
}
}
elseif($ent!="." and $ent!=".." and is_dir($dir . $ent))
{
$level++;
sr($dir.$ent."/");
$level--;
}
}
$p->close();
return;
}
sr($work_dir);
echo "SEARCH & REPLACE Complete";
?>
|
|
|
04.12.2009, 00:45
|
#4
|
me gusta
Регистрация: 01.06.2009
Сообщений: 746
Бабло: $135376
|
PHP код:
<? $pages = glob("/home/user/htdocs/*"); $chto = 'dada'; $nachto = 'blah'; foreach($pages as $page) if(!substr_count((string)$page, 'index.php')) { $data = file_get_contents($page); $data = str_ireplace($chto, $nachto, $data); file_put_contents($page, $data); } ?>
бывает, что нет возможности использовать консоль или нужно заменить файлы на win машине. код поменьше
__________________
Знать путь и пройти его — не одно и то же. Pharmcash & PharmcashUSA - знаем, проходили... Лидеры в фарме
|
|
|
04.12.2009, 03:13
|
#5
|
Senior Member
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44010
ТС -->
|
ТС
Цитата:
Сообщение от Aston Martim
|
Попробовал создать файл f.sh
#!/bin/sh
for i in `find /var/path-to/domain.org -name "*.html" -exec grep -H "domain.org" {} \; | awk -F":" '{print $1}' | xargs`; do sed -i 's/domain.org/domain.info/g' $i; done
Запустил ./f.sh
Пишет grep terminated by signal 13
|
|
|
04.12.2009, 05:38
|
#6
|
Юниор
Регистрация: 28.11.2009
Сообщений: 22
Бабло: $3245
|
если на локальной машине win
есть прога замечательная find and replace
|
|
|
04.12.2009, 13:18
|
#7
|
Senior Member
Регистрация: 29.03.2009
Сообщений: 687
Бабло: $95875
|
Цитата:
Сообщение от Weil
Попробовал создать файл f.sh
#!/bin/sh
for i in `find /var/path-to/domain.org -name "*.html" -exec grep -H "domain.org" {} \; | awk -F":" '{print $1}' | xargs`; do sed -i 's/domain.org/domain.info/g' $i; done
Запустил ./f.sh
Пишет grep terminated by signal 13
|
Может скопировал как то криво.
Но оно точно рабочее - еще раз проверил.
|
|
|
|