从子文件夹中删除文件(如果它们存在于已关闭的文件夹中)

时间:2016-04-29 01:02:40

标签: perl perl-module

首先,我不是一名perl程序员,但我知道这很危险......

我购买了一个拍卖脚本,该脚本存在脚本卖家拒绝处理的问题。

有一个auctiondata文件夹,其中包含所有类别文件夹,包括项目销售时的已关闭文件夹。当一个项目被发布时,它会进入一个类别文件夹,当它出售时,它被支持移动到关闭的文件夹中,而是一个副本被移动到关闭的文件夹中,原始文件留在它的类别文件夹中。

这会导致软件错误,直到从类别文件夹中删除违规文件。

所以我想知道是否有人可以帮我查找所有类别文件夹的脚本,并且文件名与封闭文件夹中的文件匹配的任何文件都将被删除。

我自己做了尝试,但都失败了。

buyit.pl页面上的代码如下......

############################################## 
# Sub: Close Auction now 
# This sets an item's status to closed. 

sub closebuyit { 
  if ($form{'CATEGORY'},$form{'ITEM'} ne $config{'closedir'}) { 
      if ($config{'closedir'}) {
          umask(000); # UNIX file permission junk 
          mkdir("$config{'basepath'}$config{'closedir'}", 0777) unless (-d "$config{'basepath'}$config{'closedir'}"); 
          print "Please notify the site admin that this item cannot be copied to the closed directory even though it is closed.\n" 
              unless &movefile("$config{'basepath'}$form{'CATEGORY'}/$form{'ITEM'}.dat", "$config{'basepath'}$config{'closedir'}/$form{'CATEGORY'}$form{'ITEM'}.dat"); 

          unlink("$config{'basepath'}askseller/$form{'ITEM'}.dat");
          unlink("$config{'basepath'}$config{'countdir'}/$form{'ITEM'}.dat");
      }
      else { 
          print "Please notify the site admin that this item cannot be removed even though it is closed.\n" unless unlink("$config{'basepath'}$form{'CATEGORY'}/$form{'ITEM'}.dat"); 
      }
   }
}

################################################
1;

这应该将文件从类别文件夹移动到关闭的文件夹,但不是。文件夹的权限是755,但内部创建的文件是644。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您应该将错误处理添加到两个取消链接行:

unlink("$config{'basepath'}askseller/$form{'ITEM'}.dat")
    or die "Error $! deleting $config{'basepath'}askseller/$form{'ITEM'}.dat";
unlink("$config{'basepath'}$config{'countdir'}/$form{'ITEM'}.dat")
    or die "Error $! deleting $config{'basepath'}$config{'countdir'}/$form{'ITEM'}.dat";

这会导致您的脚本崩溃,但您会收到可能导致最终解决方案的确切错误消息。

以下是清理脚本的开始:

#!/usr/bin/perl -l
use strict;
use warnings;

# Read the files from the closed directory
# Quick exit the script if no files could be found
opendir my $closed_dh,'/path/to/closed' or die "$! opening closed dir";
my %closed_files =
    # Use each file ($_) as key with a fixed value of 1
    (map { $_ => 1 } readdir($closed_dh)) or exit;
closedir $closed_dh;

# Loop through a list of directories
for my $dir ('/path/to/other_dir1','..dir2','..dirN') {
    opendir my $search_dh,$dir or die "$! opening $dir";
    # Loop through all files in one directory
    for my $file (readdir($search_dh)) {
        # Remove file if it exists in the list of closed files
        unlink $dir.'/'.$file or die "Error $! deleting $dir/$file"
            if $closed_files{$file};
    }
}

刚开始时未经测试的来源。所有Perl命令都位于http://perldoc.perl.org/,更多信息位于http://perlmaven.comhttp://learn.perl.org

答案 1 :(得分:0)

谢谢Sebastian,我创建了一个测试文件 - move1.pl,这是里面的代码......

<?php

if ( is_user_logged_in() )
    echo do_shortcode( '[contact-form-7 id="1234" title="Contact form 1"]' );

?>

不幸的是它没有用,我从服务器日志中得到了这个错误。

0160429T101358:mybidsz.com/cgi-bin/move1.pl 错误是删除目录/home/users/web/b1262/moo.mybidszcom/cgi-bin/1/。在/home/users/web/b1262/moo.mybidszcom/cgi-bin/move1.pl第19行。

如果文件夹1是Antiques18文件夹,则在内部,并且该文件夹内是名为1463148060.dat的文件。

内部文件夹1是一个已关闭的文件夹,在该文件夹中也是一个名为1463148060.dat的文件以及其他文件名。

我希望找到一个解决方案,然后将其合并到buyit.pl代码的末尾......