删除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;
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/\t//g;
$value =~ s/>/>/g;
$value =~ s/</</g;
$FORM{$name} = $value;
}
$action = $FORM{';action';};
$u = $FORM{';u';};
$pass = $FORM{';pass';};
$u = &clean($u);
$pass = &clean($pass);
if((!$action)||($action eq "login")){&godown;}
if($action eq "del"){&main;}
sub godown{
if(($u eq $user)&&($pass eq $password)) {
&main;
}else{
&login;
}
}
sub main{
$|=1;
if ($ENV{';REQUEST_METHOD';} eq "POST")
{
read(STDIN, $buffer, $ENV{';CONTENT_LENGTH';});
}
else
{
$buffer = $ENV{';QUERY_STRING';};
}
@pairs = split(/&/, $buffer);
foreach (@pairs)
{
($name, $value) = split(/=/, $_);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/\t/--/g;
$value =~ s/>/>/g;
$value =~ s/</</g;
$FORM{$name} = $value;
}
print "Content-Type: text/html\n\n";#输出HTTP头
#如果提交了删除对象,则删除对象,如果没有,则显示主程序界面
if (defined($FORM{';deltarget';}))
{
my $deltarget = $FORM{';deltarget';};
$deltarget =~ s/[\/\\]*$//o;
$deltarget =~ s/\\/\//g;
if (&del($deltarget))#删除成功
{
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#删除失败
{
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#获取程序所在的绝对路径$mydir和程序名称$thisprog的函数
{
if ($ENV{';SCRIPT_FILENAME';})
{
$mydir = substr($ENV{';SCRIPT_FILENAME';}, 0, rindex($ENV{';SCRIPT_FILENAME';}, "/"));
}
else
{
$mydir = substr($ENV{';PATH_TRANSLATED';}, 0, rindex($ENV{';PATH_TRANSLATED';}, "\\"));
$mydir=~ s/\\/\//g;
}
$thisprog = substr($ENV{';SCRIPT_NAME';}, rindex($ENV{';SCRIPT_NAME';}, "/") + 1, length($ENV{';SCRIPT_NAME';}));
return;
}
sub del#删除一个目录或者是文件的函数,调用参数为文件或者是目录名
{
my $deltarget = shift;
return 1 if (unlink($deltarget));
return 0 unless (opendir(DIRS, $deltarget));
my @dirlist = readdir(DIRS);
closedir(DIRS);
my $delstatus = 1;
foreach (@dirlist)
{
next if ($_ eq "." || $_ eq "..");
$delstatus = 0 unless (&del($deltarget . "/" . $_));
}
return 0 unless($delstatus);
return 0 unless(rmdir($deltarget));
return 1;
}
sub display#显示本死锁文件删除程序的主界面
{
&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: #9fc607; filter: glow(color=#333333, strength=1); position: relative; width: 100%}
.cont1{font-family: 宋体; font-size: 12px; line-height: 130%; color: #ff0000}
.cont2{font-family: 宋体; font-size: 12px; line-height: 130%; color: #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=$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程序所在的绝对路径:$mydir</p>
<p align=center class=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";#输出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 #ff0000; border-right: 1px dotted #ff0000; border-top: 1px dotted #ff0000; border-bottom:1px dotted #ff0000;background-color: ##e1e9ff"> <input type=reset value=" 重 来 " style="border-left: 1px dotted #ff0000; border-right: 1px dotted #ff0000; border-top: 1px dotted #ff0000; border-bottom:1px dotted #ff0000;background-color: ##e1e9ff"></td></tr>
<tr><td> </td></tr>
<tr><td class=3dfontC align=center> 本系统在完善当中</td></tr>
</form></table>
</body></html>~;
exit;
}
sub clean {
my $string = shift;
return ';'; unless (defined $string);
$string =~ s|\t| |g;
$string =~ s|&|&|g;
$string =~ s|<!--|<!--|g;
$string =~ s|-->|-->|g;
$string =~ s|<script|<script|ig;
$string =~ s|>|>|g;
$string =~ s|<|<|g;
$string =~ s|"|"|g;
$string =~ s!^\s+!!;
$string =~ s!\s+$!!;
$string =~ s| | |g;
$string =~ s|\n|<br>|g;
$string =~ s|\r||g;
$string =~ s|\_\_(.+?)\_\_||g;
return $string;
}[/code]
PHP程序:
[code]<?php
$password = "isphp" ;// 管理密码,运行时会要求输入,一定要修改掉。不然程序无法运行。
////// 下面是主程序,不必修改 ////////////////////////////////////////////////////////
echo ';<style>';
. ';body{font-family:Verdana; font-size:12px; background-color:#fcfcfc}';
. ';input{font:12px Tahoma} ';
. ';</style>';;
if ( $password == "isphp" )
{
echo "<h3 align=center>您没有修改管理密码,为避免不安全,请修改成其它的!</h3>";
echo "<center>修改方法如下:<br>"
. ';用记事本打开 本文件(rm.php), 将第二行的 <font color=red>$password = "isphp" </font> 中的 isphp 改成您想要的密码, 再上传至服务器</center>';;
exit;
}
if ( !IsSet($HTTP_POST_VARS[';dirname';]) )
{
$self = $_SERVER[';PHP_SELF';] ? $_SERVER[';PHP_SELF';] : $PHP_SELF;
echo "<form action=\"{$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 ( $password != $HTTP_POST_VARS[';pass';] )
{
exit("<script>alert(';错误的管理员密码, 无法继续操作! 如果您忘了密码,可以在本文件的第二行查到密码!';);</script>");
}
$dir_name = $HTTP_POST_VARS[';dirname';];
if ( is_file( $dir_name ) )
{
if ( unlink($dir_name) )echo "Del file \"$dirname\" successfully!<br>";
elseecho "<FONT COLOR=RED>Fail to del file \"$dirname\"!</FONT><br>";
}
else
{
CleanDir($dir_name);
if ( rmdir($dir_name) )echo "Remove dir \"$dirname\" successfully!<br>";
else echo "<FONT COLOR=RED>Fail to Remove dir \"$dirname\"!</FONT><br>";
}
}
function CleanDir($dir)
{
$handle=opendir($dir);
while ( $file=readdir($handle) )
{
if ( ($file==".") || ($file=="..") ) continue;
if ( is_dir("$dir/$file") )
{
CleanDir("$dir/$file");
if ( rmdir("$dir/$file") )echo "Remove dir \"$dir/$file\" successfully!<br>";
elseecho "<FONT COLOR=RED>Fail to Remove dir \"$dir/$file\"!</FONT><br>";
}
else
{
if ( unlink("$dir/$file") ) echo "Del file \"$dir/$file\" successfully!<br>";
else echo "<FONT COLOR=RED>Fail to del file \"$dir/$file\"!</FONT><br>";
}
}
closedir($handle);
}
?>
[/code]
页:
[1]