:-[ Домашняя страница девелопера ] :( + φ = :D

Рекурсивное удаление файлов в папке на perl

Задача простая, но, надеюсь, это сэкономит кому-то пару часов.

#!/usr/bin/perl

# рекурсивное удаление папки на perl

use strict;

my $dir = ".";
my $DELETE_DIR = return_dir_handle();
opendir( $DELETE_DIR, "$dir" ) || die "Can't opendir $dir: $!\n";
while( defined( my $file = readdir( $DELETE_DIR ) ) ) {
        next if $file =~ /^\.\.?$/; # Skip . and ..
        
        if( -d "$dir/$file" ) {
        # DELETE ALL SUB DIRS AND FILES
        
                print "delete file $dir/$file ? (y/n)$/";
                my $answear = <STDIN>;
                chomp $answear;
                if( $answear eq "y" ) {
                        &remove_dir( "$dir/$file" );
                }#if
                
        } else {
                print "delete file $dir/$file ? (y/n)$/";
                my $answear = <STDIN>;
                chomp $answear;
                if( $answear eq "y" ) {
                        print "unlink $dir/$file $/";
                        # unlink "$dir/$file";
                }#if
        } # End if

} # End while
closedir( $DELETE_DIR );


################################################################################
# Subprogram: remove_dir
#
sub remove_dir {
my ( $dir ) = @_;

        my $DELETE_DIR = return_dir_handle();
        opendir( $DELETE_DIR, "$dir" ) || die "Can't opendir $dir: $!\n";
        while( defined( my $file = readdir( $DELETE_DIR ) ) ) {
                next if $file =~ /^\.\.?$/; # Skip . and ..
                
                if( -d "$dir/$file" ) {
                        print "delete file $dir/$file ? (y/n)$/";
                        my $answear = <STDIN>;
                        chomp $answear;
                        if( $answear eq "y" ) {
                                &remove_dir( "$dir/$file" );
                        }#if
                        
                } else {
                        print "delete file $dir/$file ? (y/n)$/";
                        my $answear = <STDIN>;
                        chomp $answear;
                        if( $answear eq "y" ) {
                                print "unlink $dir/$file $/";
                                # unlink "$dir/$file";
                        }#if
                } # End if

        } # End while
        closedir( $DELETE_DIR );

        print "rmdir $dir $/";
        # rmdir $dir;

} # End sub remove_dir


################################################################################
# Subprogram:  return_dir_handle
# Description: Создает анонимный манипулятор каталога
#
sub return_dir_handle {
local *DIRHANDLE;

return *DIRHANDLE

}       # End sub return_dir_handle


Вернуться к списку записей




комментарии работают на Disqus


В админку