in reply to Re^2: needing to zip files in a series that begin with the same IP address
in thread needing to zip files in a series that begin with the same IP address

It's OK if the IPs are random, as your regex will match any IPv4 address. Those in the data set are just for the example script. That is, you'll need to to code the grabbing of the actual file names.

  • Comment on Re^3: needing to zip files in a series that begin with the same IP address

Replies are listed 'Best First'.
Re^4: needing to zip files in a series that begin with the same IP address
by diamondsandperls (Beadle) on Jul 27, 2012 at 21:21 UTC
    currently i am not zipping anything the code only prints the screen the Zip portion at the bottom of the screen when i run the code. i just used your code as is
    Zip 192.168.1.1somestring.txt -> 192.168.1.1 Zip 192.168.1.1anotherRANDOMstring.txt -> 192.168.1.1 Zip 192.168.1.1.somerandom.docx -> 192.168.1.1 Zip 192.168.1.3somestring.txt -> 192.168.1.3 Zip 192.168.1.3anotherRANDOMstring.txt -> 192.168.1.3 Zip 192.168.1.3.somerandom.docx -> 192.168.1.3

      See my follow-up posting below.

Re^4: needing to zip files in a series that begin with the same IP address
by diamondsandperls (Beadle) on Jul 27, 2012 at 21:34 UTC
    man im clueless on this i know how to regex for my file list just not sure how to apply to the code you gave.
    #!perl use strict; use warnings; use Modern::Perl; use IO::Compress::Zip qw(zip $ZipError) ; my %files; while (<DATA>) { next unless /^(\d+.\d+.\d+.\d+)/; push @{ $files{$1} }, $_; } for my $ip ( keys %files ) { do { print "Zip $ip -> $_" } for @{ $files{$ip} }; } __DATA__ my @files = <*.txt *.docx>;

      Hi, diamondsandperls.

      You're certainly not clueless, as you've mostly done this work yourself.

      Sorry, but I didn't mean to confuse the issue by using __DATA__, but it was for example only (gives a source of the data for the script). So, you can use what you've already done like this:

      use Modern::Perl; use IO::Compress::Zip qw(zip $ZipError) ; my %files; my @files = <*.txt *.docx>; for (@files) { next unless /^(\d+.\d+.\d+.\d+)/; push @{ $files{$1} }, $_; } for my $ip ( keys %files ) { do { print "Zip $ip -> $_" } for @{ $files{$ip} }; }

      Place your zipping call within the do{} block (replacing the printing placeholder), noting that $ip contains the common IP address and $_ contains the complete file name to be zipped.

      ps Modern::Perl contains both strict and warnings.

        Thanks for your help. I am having trouble nailing that part just right i have tried several zip calls but the code is failing. Thanks for the heads up on Modern::Perl I was curious of what the module was doing.

        here is what seems to be the best educated guess

        #!perl use Modern::Perl; use IO::Compress::Zip qw(zip $ZipError) ; my %files; my @files = <*.txt *.docx>; for (@files) { next unless /^(\d+.\d+.\d+.\d+)/; push @{ $files{$1} }, $_; } for my $ip ( keys %files ) { my $output = "$ip.zip"; do { zip => $output, $ip -> $_ } for @{ $files{$ip} }; }