Perl : Delete all files except few


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl : Delete all files except few
# 1  
Old 01-27-2014
Perl : Delete all files except few

I have a directory like below. Need help with Perl to delete all files under test1 except the one passed as parameters.The parameters will
always be the directories under test1 in the format below.

EX:
Code:
dir1/abc.txt,dir2/test.xml,dir3/dfb.txt,dir4/text.xml


Code:
test1  
            ---dir1
                  abc.txt
                  def.txt
                  test.xml
                  test.csv
                  test.xml
            ---dir2
                  fgh.txt
                  jhk.txt
                  test.xml
                  test.csv
                  test.xml                   
            ---dir3
                  rth.txt
                  dfb.txt
                  test.xml
                  test.csv
                  test.xml
            ---dir4 
                  ert.txt
                  def.txt
                  test.xml
                  test.csv
                  test.xml

Did not find negation for unlink in perl.Smilie

Last edited by bartus11; 01-27-2014 at 06:04 PM.. Reason: Please use CODE tags
# 2  
Old 01-27-2014
Have a look at the File::Find module.
You could store the arguments passed in a hash and then test the files/directories found.
Be a bit careful though...
Good luck.
# 3  
Old 01-27-2014
New to perl Smilie Not familiar with hashes
# 4  
Old 01-27-2014
Put this into "script.pl":
Code:
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Std;
use File::Find;

our ($opt_d, $opt_e);
getopt("de");
die "exclude is not defined (no parameter for -e)" unless defined $opt_e;
our $dir = $opt_d;
die "$dir is not a directory (wrong parameter for -d)" unless -d $dir;
our @exclude = split /,/, $opt_e;

finddepth(\&wanted, "$dir");

sub wanted {
  if (( ! grep {$File::Find::name eq "$dir/$_"} @exclude) && (-f $_)) {
    unlink $_;
  }
}

Then run the script as:
Code:
./script.pl -d/path/to/test1 -e"dir1/abc.txt,dir2/test.xml,dir3/dfb.txt,dir4/text.xml"

This User Gave Thanks to bartus11 For This Post:
# 5  
Old 01-28-2014
@bartus11: Thanks a lot it works great...!!!Smilie One last question how to include a echo statement if any one of the files passed as parameters are not present in the directory.
# 6  
Old 01-28-2014
Try:
Code:
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Std;
use File::Find;

our ($opt_d, $opt_e);
getopt("de");
die "exclude is not defined (no parameter for -e)" unless defined $opt_e;
our $dir = $opt_d;
die "$dir is not a directory (wrong parameter for -d)" unless -d $dir;
our @exclude = split /,/, $opt_e;

foreach my $file (@exclude) {
  print "$dir/$file not found\n" if ! -f "$dir/$file";
}

finddepth(\&wanted, "$dir");

sub wanted {
  if (( ! grep {$File::Find::name eq "$dir/$_"} @exclude) && (-f $_)) {
    unlink $_;
  }
}

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script needed to delete to the list of files in a directory based on last created & delete them

Hi My directory structure is as below. dir1, dir2, dir3 I have the list of files to be deleted in the below path as below. /staging/retain_for_2years/Cleanup/log $ ls -lrt total 0 drwxr-xr-x 2 nobody nobody 256 Mar 01 16:15 01-MAR-2015_SPDBS2 drwxr-xr-x 2 root ... (2 Replies)
Discussion started by: prasadn
2 Replies

2. Shell Programming and Scripting

Delete all files if another files in the same directory has a matching occurrence of a specific word

he following are the files available in my directory RSK_123_20141113_031500.txt RSK_123_20141113_081500.txt RSK_126_20141113_041500.txt RSK_126_20141113_081800.txt RSK_128_20141113_091600.txt Here, "RSK" is file prefix and 123 is a code name and rest is just timestamp of the file when its... (7 Replies)
Discussion started by: kridhick
7 Replies

3. Shell Programming and Scripting

Perl Script to find the disk usage and to delete the files which is consuming more space

Hi All, I have written a script to check the file system usage and to delete the files which is consuming more space.Please check whether the script is corrcet #Script Starts here #!/usr/local/bin/perl #Program to find the disk space and to delete the older files #Checks the type of OS... (8 Replies)
Discussion started by: arunkarthick
8 Replies

4. Shell Programming and Scripting

Need help creating a script to FTP files to a server and then delete the files that were transfered.

I am trying to FTP files to a Windows server through my Linux machine. I have setup the file transfer with no problems but am having problem deleting those files from the Linux box. My current non-working solution is below. Any ideas, anyone?? :wall: Please be gentle, I'm fairly new to this... (4 Replies)
Discussion started by: jmalfhs
4 Replies

5. Shell Programming and Scripting

Delete files in directory using perl

Hello All I am implementing my task in Perl and i found an issue. What i want to do is to remove files from the directory which were made 20 days back using Perl script (9 Replies)
Discussion started by: parthmittal2007
9 Replies

6. Shell Programming and Scripting

delete a file using perl

Hi, How to delete a file (if exists) using perl script. I have used following script.. if ( -e $newfile) { open (FILE, ">$newfile") || die "Cannot Open File\n"; print FILE; close(FILE); } But it gives me error "Use of uninitialized value in print". please help. Thanks in... (1 Reply)
Discussion started by: arup1980
1 Replies

7. Shell Programming and Scripting

How to delete newline with perl

input: donkey monkey dance drink output should be: donkey monkey (8 Replies)
Discussion started by: cola
8 Replies

8. Shell Programming and Scripting

delete last row in PERL

How to delete last row in the file in PERL. file1 has a.output b.output c.output d.output e.output expected output is a.output b.output c.output d.output (1 Reply)
Discussion started by: adaleru
1 Replies

9. Shell Programming and Scripting

perl script to check if empty files are created and delete them and run a shell script

I have a local linux machine in which the files are dumped by a remote ubuntu server. If the process in remote server has any problem then empty files are created in local machine. Is there any way using perl script to check if the empty files are being created and delete them and then run a shell... (2 Replies)
Discussion started by: hussa1n
2 Replies

10. Shell Programming and Scripting

Delete all files if another files in the same directory has a matching occurence of a specific word

Hello, I have several files in a specific directory. A specific string in one file can occur in another files. If this string is in other files. Then all the files in which this string occured should be deleted and only 1 file should remain with the string. Example. file1 ShortName "Blue... (2 Replies)
Discussion started by: premier_de
2 Replies
Login or Register to Ask a Question