星星博客's Archiver

cnangel 发表于 2005-8-25 19:12

删除Unix上目录文件过多问题

[color=red]作者:小歪歪
email: [email]annysun@163.net[/email]
日期:9/3/2001 3:03:59 PM[/color]
    大家有没有碰到过unix上,一个目录文件太多,无法删除的现象,我为大家写了个perl的程序删除!
cat > del.pl
[code]
#!/usr/bin/perl
$file1=$ARGV[0];
@tests=(1,2,3,4,5,6,7,8,9,';A';,';B';,';C';,';D';,';E';,';F';,';G';,';H';,';I';,';G';,';K';,';L';,';M';,';N';,';O';,';P';,';Q';,';R';,';S';,';T';,';U';,';V';,';W';,';X';,';Y';,';Z';);
foreach  $test(@tests) {
$file=$file1.$test;
@chars=(0,1,2,3,4,5,6,7,8,9,';A';,';B';,';C';,';D';);
foreach $char(@chars) {
`rm $file$char*`;
}
`rm $file*`;
}
`rm $file1*`;
[/code]

[color=#CC0000][b]——————以下内容由[u]Cnangel[/u]在[u]2005年08月25日 07:15pm[/u]时添加———————[/b][/color]

个人感觉是一种比较差的程序!
请看下面两种语言写的程序:
PERL:
[code]#!/usr/bin/perl
################################################################################
#               NT/UNIX/LINUX/BSD各系统死锁文件超级删除工具
#
#                         荣誉出品:94Cool.Net
#
#                                                                   作者:BigJim
#                                                                     2002/09/25
################################################################################
#读取提交参数部分
$user="cnangel";  #可以写一个管理会员的sub程序,实现多用户操作
$password="自己的密码";
if ($ENV{';REQUEST_METHOD';} eq "POST") {
  read(STDIN, $buffer, $ENV{';CONTENT_LENGTH';});
}
else {
  $buffer = $ENV{';QUERY_STRING';};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   &#36;value =~ s/<!--(.|\n)*-->//g;
   &#36;value =~ s/\t//g;
   &#36;value =~ s/>/>/g;
   &#36;value =~ s/</</g;
   &#36;FORM{&#36;name} = &#36;value;
}
&#36;action     = &#36;FORM{';action';};
&#36;u = &#36;FORM{';u';};
&#36;pass = &#36;FORM{';pass';};
&#36;u = &clean(&#36;u);
&#36;pass = &clean(&#36;pass);
if((!&#36;action)||(&#36;action eq "login")){&godown;}
if(&#36;action eq "del"){&main;}
sub godown{
if((&#36;u eq &#36;user)&&(&#36;pass eq &#36;password)) {
&main;
}else{
&login;
}
}
sub main{
&#36;|=1;
if (&#36;ENV{';REQUEST_METHOD';} eq "POST")
{
read(STDIN, &#36;buffer, &#36;ENV{';CONTENT_LENGTH';});
}
else
{
&#36;buffer = &#36;ENV{';QUERY_STRING';};
}
@pairs = split(/&/, &#36;buffer);
foreach (@pairs)
{
(&#36;name, &#36;value) = split(/=/, &#36;_);
&#36;value =~ tr/+/ /;
&#36;value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex(&#36;1))/eg;
&#36;value =~ s/<!--(.|\n)*-->//g;
&#36;value =~ s/\t/--/g;
&#36;value =~ s/>/>/g;
&#36;value =~ s/</</g;
&#36;FORM{&#36;name} = &#36;value;
}
print "Content-Type: text/html\n\n";&#35;输出HTTP头
&#35;如果提交了删除对象,则删除对象,如果没有,则显示主程序界面
if (defined(&#36;FORM{';deltarget';}))
{
my &#36;deltarget = &#36;FORM{';deltarget';};
&#36;deltarget =~ s/[\/\\]*&#36;//o;
&#36;deltarget =~ s/\\/\//g;
if (&del(&#36;deltarget))&#35;删除成功
{
print qq~
<html><title>删除成功!</title>
<head><meta http-equiv="Content-Type" Content="text/html; charset=gb2312"></head>
<body><p>删除目标文件(夹)成功!</p><p><a href="javascript:history.go(-1);">返回上一页</a></p></body>
</html>~;
}
else&#35;删除失败
{
print qq~
<html><title>删除失败!</title>
<head><meta http-equiv="Content-Type" Content="text/html; charset=gb2312"></head>
<body><p>删除目标文件(夹)失败!</p><p><font color=red>可能原因:目标文件(夹)不存在或者对于目标文件夹或者里面的一些文件没有权限删除!</font></p><p><a href="javascript:history.go(-1);">返回上一页</a></p></body>
</html>~;
}
}
else
{
&display;
}
exit;
}

sub getmypath&#35;获取程序所在的绝对路径&#36;mydir和程序名称&#36;thisprog的函数
{
if (&#36;ENV{';SCRIPT_FILENAME';})
{
&#36;mydir = substr(&#36;ENV{';SCRIPT_FILENAME';}, 0, rindex(&#36;ENV{';SCRIPT_FILENAME';}, "/"));
}
else
{
&#36;mydir = substr(&#36;ENV{';PATH_TRANSLATED';}, 0, rindex(&#36;ENV{';PATH_TRANSLATED';}, "\\"));
&#36;mydir=~ s/\\/\//g;
}
&#36;thisprog = substr(&#36;ENV{';SCRIPT_NAME';}, rindex(&#36;ENV{';SCRIPT_NAME';}, "/") + 1, length(&#36;ENV{';SCRIPT_NAME';}));
return;
}
sub del&#35;删除一个目录或者是文件的函数,调用参数为文件或者是目录名
{
my &#36;deltarget = shift;
return 1 if (unlink(&#36;deltarget));
return 0 unless (opendir(DIRS, &#36;deltarget));
my @dirlist = readdir(DIRS);
closedir(DIRS);
my &#36;delstatus = 1;
foreach (@dirlist)
{
next if (&#36;_ eq "." || &#36;_ eq "..");
&#36;delstatus = 0 unless (&del(&#36;deltarget . "/" . &#36;_));
}
return 0 unless(&#36;delstatus);
return 0 unless(rmdir(&#36;deltarget));
return 1;
}
sub display&#35;显示本死锁文件删除程序的主界面
{
&getmypath;
print qq~<!--Powered By 94Cool.Net-->
<html><title>NT/UNIX/LINUX/BSD各系统死锁文件超级删除工具</title>
<head>
<meta http-equiv="Content-Type" Content="text/html; charset=gb2312">
<style type="text/css">
.title{font-family: 宋体; font-size: 15px; line-height: 130%; color: &#35;9fc607; filter: glow(color=&#35;333333, strength=1); position: relative; width: 100%}
.cont1{font-family: 宋体; font-size: 12px; line-height: 130%; color: &#35;ff0000}
.cont2{font-family: 宋体; font-size: 12px; line-height: 130%; color: &#35;000000}
.copy{font-family: 黑体; font-size: 15px; line-height: 130%}
</style>
<script language="JavaScript">
function go1()
{
if (window.event.keyCode == 13)
return confirm(';你确认要将服务器上的 "'; + document.FORM.deltarget.value + ';" 目录完全删除么?';);
else
return true;
}
function go2()
{
return confirm(';你确认要将服务器上的 "'; + document.FORM.deltarget.value + ';" 目录完全删除么?';);
}
</script>
</head>
<body>
<p align=center class=title>NT/UNIX/LINUX/BSD各系统死锁文件超级删除工具</p>
<form name=FORM action=&#36;thisprog method=POST>
<input type=hidden name=action value=del>
<p class=cont1>需要删除的目录或者文件的绝对路径:</p>
<p class=cont1><input name=deltarget type=text size=64 OnKeyDown="return go1();">  <input type=submit value=删除(请慎用) OnClick="return go2();"></p>
</form>
<p class=cont1>请在上面填写你要删除的目录在主机上的绝对路径,如果是UNIX/LINUX/BSD主机直接填相对路径也可以!请小心使用,删除后,文件夹和文件夹中的文件将全数被删除掉!如果目录下面有深层路径也不必担心要手动一步步来做,程序会帮你全部删除:)</p>
<p class=cont1>NT例子:f:/www/cgi-bin/bbs/data</p>
<p class=cont1>UNIX例子:user/home/cgi-bin/bbs/data</p>
<p class=cont1>UNIX例子(相对路径):bbs/data</p>
<p class=cont2>当前CGI程序所在的绝对路径:&#36;mydir</p>
<p align=center class=copy>&copy;荣誉出品:<b><font color=5599ff>94Cool</font>.<font color=ff9955>Net</font></b></p>
</body>
</html>
~;
return;
}
sub login{
print "Content-Type: text/html\n\n";&#35;输出HTTP头
print qq~<html>
<head>
<title>用户登陆界面</title>
<meta http-equiv=';content-type'; content=';text/html; charset=gb2312';>
<LINK href=';http://www.gsfchina.org/css/style.css'; type=text/css rel=stylesheet>
</head>
<body background="../image/bg19.jpg">
<TABLE cellSpacing=0 cellPadding=0 width=770 align=center border=0>
<tr><td> </td></tr>
<tr><td> </td></tr>
<tr><td> </td></tr><tr><td class=3dfontA align=center>用户登陆</td></tr>
<form name =login action=sdel.cgi method=POST>
<input type=hidden name=action value=login>
<tr><td align=center>用户名:<input type=text size=12 name=u></td></tr>
<tr><td align=center>密 码:<input type=password size=12 name=pass></td></tr>
<tr><td align=center><input type=submit value=" 登 陆 " style="border-left: 1px dotted &#35;ff0000; border-right: 1px dotted &#35;ff0000; border-top: 1px dotted &#35;ff0000; border-bottom:1px dotted &#35;ff0000;background-color: &#35;&#35;e1e9ff">  <input type=reset value=" 重 来 " style="border-left: 1px dotted &#35;ff0000; border-right: 1px dotted &#35;ff0000; border-top: 1px dotted &#35;ff0000; border-bottom:1px dotted &#35;ff0000;background-color: &#35;&#35;e1e9ff"></td></tr>
<tr><td> </td></tr>
<tr><td class=3dfontC align=center> 本系统在完善当中</td></tr>
</form></table>
</body></html>~;
exit;
}
sub clean {
my &#36;string = shift;
return ';'; unless (defined &#36;string);
&#36;string =~ s|\t| |g;
&#36;string =~ s|&|&|g;
&#36;string =~ s|<!--|&#60;&#33;--|g;
&#36;string =~ s|-->|--&#62;|g;
&#36;string =~ s|<script|&#60;script|ig;
&#36;string =~ s|>|>|g;
&#36;string =~ s|<|<|g;
&#36;string =~ s|"|"|g;
&#36;string =~ s!^\s+!!;
&#36;string =~ s!\s+&#36;!!;
&#36;string =~ s|  |  |g;
&#36;string =~ s|\n|<br>|g;
&#36;string =~ s|\r||g;
&#36;string =~ s|\_\_(.+?)\_\_||g;
return &#36;string;
}[/code]
PHP程序:
[code]<?php
&#36;password = "isphp" ;// 管理密码,运行时会要求输入,一定要修改掉。不然程序无法运行。
//////  下面是主程序,不必修改  ////////////////////////////////////////////////////////
echo ';<style>';
. ';body{font-family:Verdana; font-size:12px; background-color:&#35;fcfcfc}';
. ';input{font:12px Tahoma} ';
. ';</style>';;
if ( &#36;password == "isphp" )
{
echo "<h3 align=center>您没有修改管理密码,为避免不安全,请修改成其它的!</h3>";
echo "<center>修改方法如下:<br>"
. ';用记事本打开 本文件(rm.php), 将第二行的 <font color=red>&#36;password = "isphp" </font> 中的 isphp 改成您想要的密码, 再上传至服务器</center>';;
exit;
}
if ( !IsSet(&#36;HTTP_POST_VARS[';dirname';]) )
{
&#36;self = &#36;_SERVER[';PHP_SELF';] ? &#36;_SERVER[';PHP_SELF';] : &#36;PHP_SELF;
echo "<form action=\"{&#36;self}\" method=post name=delform><center><font color=red>欲删除的文件或文件夹</font>: <input name=dirname style=\"color:red\"> "
. "密码: <input type=password name=pass size=6> <input type=submit value=\"确定\"></center></form>";
echo " <SCRIPT> document.delform.dirname.focus() </SCRIPT> ";
}
else
{
if ( &#36;password != &#36;HTTP_POST_VARS[';pass';] )
{
exit("<script>alert(';错误的管理员密码, 无法继续操作! 如果您忘了密码,可以在本文件的第二行查到密码!';);</script>");
}
&#36;dir_name = &#36;HTTP_POST_VARS[';dirname';];
if ( is_file( &#36;dir_name ) )
{
        if ( unlink(&#36;dir_name) )echo "Del file \"&#36;dirname\" successfully!<br>";
                elseecho "<FONT COLOR=RED>Fail to del file \"&#36;dirname\"!</FONT><br>";
}
else
{
        CleanDir(&#36;dir_name);
if ( rmdir(&#36;dir_name) )echo "Remove dir \"&#36;dirname\" successfully!<br>";
            else                 echo "<FONT COLOR=RED>Fail to Remove dir \"&#36;dirname\"!</FONT><br>";
}
}
function CleanDir(&#36;dir)
{
&#36;handle=opendir(&#36;dir);
while ( &#36;file=readdir(&#36;handle) )
{
if ( (&#36;file==".") || (&#36;file=="..") ) continue;
if ( is_dir("&#36;dir/&#36;file") )
{
CleanDir("&#36;dir/&#36;file");
if ( rmdir("&#36;dir/&#36;file") )echo "Remove dir \"&#36;dir/&#36;file\" successfully!<br>";
                        elseecho "<FONT COLOR=RED>Fail to Remove dir \"&#36;dir/&#36;file\"!</FONT><br>";
}
else      
{
if ( unlink("&#36;dir/&#36;file") )     echo "Del file \"&#36;dir/&#36;file\" successfully!<br>";
else                 echo "<FONT COLOR=RED>Fail to del file \"&#36;dir/&#36;file\"!</FONT><br>";  
}
}
closedir(&#36;handle);
}
?>
[/code]

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.