Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: rename zip files and folders inside zip files

by GotToBTru (Prior)
on Aug 27, 2015 at 13:12 UTC ( [id://1140199]=note: print w/replies, xml ) Need Help??


in reply to rename zip files and folders inside zip files

So the program aborts on the 2nd line of the foreach loop? Have you checked permissions on the file(s)?

Ugh. Missed the single quotes :) Glad not everybody is this obtuse.

Dum Spiro Spero
  • Comment on Re: rename zip files and folders inside zip files

Replies are listed 'Best First'.
Re^2: rename zip files and folders inside zip files
by mariog (Acolyte) on Aug 27, 2015 at 14:24 UTC

    it seems to work. but I need to rename 1700 files but it crash after a while because of too many open files... how can I increase the amount of open files or limit the amount of open files? </p

    IO error: Can't open ATP.xxxxxxxxxx.zip : Too many open files at /usr/share/perl5/Archive/Zip/FileMember.pm line 40 Archive::Zip::FileMember::_openFile('Archive::Zip::ZipFileMemb +er=HASH(0x1ff1560)') called at /usr/share/perl5/Archive/Zip/FileMembe +r.pm line 30 Archive::Zip::FileMember::fh('Archive::Zip::ZipFileMember=HASH +(0x1ff1560)') called at /usr/share/perl5/Archive/Zip/ZipFileMember.pm + line 381 Archive::Zip::ZipFileMember::rewindData('Archive::Zip::ZipFile +Member=HASH(0x1ff1560)') called at /usr/share/perl5/Archive/Zip/Membe +r.pm line 1063 Archive::Zip::Member::_writeToFileHandle('Archive::Zip::ZipFil +eMember=HASH(0x1ff1560)', 'IO::File=GLOB(0x1ff7598)', 1, 0) called at + /usr/share/perl5/Archive/Zip/Archive.pm line 420 Archive::Zip::Archive::writeToFileHandle('Archive::Zip::Archiv +e=HASH(0x1ea7730)', 'IO::File=GLOB(0x1ff7598)') called at /usr/share/ +perl5/Archive/Zip/Archive.pm line 456 Archive::Zip::Archive::overwriteAs('Archive::Zip::Archive=HASH +(0x1ea7730)', 'ROUTINGS.D150313.T1600.zip') called at ./ziprenamer2.p +l line 16 Can't write to /tmp/k4YwCOwKhU.zip at ./ziprenamer2.pl line 16 write error Too many open files
      From the POD:
      endRead() Must be called to close files, etc.
        I try to do this:
        #!/usr/bin/perl -w use warnings; use strict; use Archive::Zip qw( :ERROR_CODES ); my @files; @files = <ATP.xxx*.zip>; foreach my $file (@files){ my $zip = Archive::Zip->new(); $zip->read($file) == AZ_OK or die "read error $!"; $zip->endRead($file); $file=~ s{\.[^.]+$}{}; my $m1 = $zip->memberNamed($file); $file=~s/^.{4}//s; $m1->fileName($file); $zip->overwriteAs("$file.zip") == AZ_OK or die "write error $!\n"; }
        it tells me: Can't locate object method "endRead" via package "Archive::Zip::Archive" at ./ziprenamer2.pl line 12. if I do this:
        #!/usr/bin/perl -w use warnings; use strict; use Archive::Zip qw( :ERROR_CODES ); my @files; @files = <ATP.xxx*.zip>; foreach my $file (@files){ my $zip = Archive::Zip->new(); $zip->read($file) == AZ_OK or die "read error $!"; #$zip->endRead($file); $file=~ s{\.[^.]+$}{}; my $m1 = $zip->memberNamed($file); $file=~s/^.{4}//s; $m1->fileName($file); $m1->endRead(); $zip->overwriteAs("$file.zip") == AZ_OK or die "write error $!\n"; }
        I get the same error as before and too many files open
        at /usr/share/perl5/Archive/Zip/FileMember.pm line 40 Archive::Zip::FileMember::_openFile('Archive::Zip::ZipFileMemb +er=HASH(0x257b610)') called at /usr/share/perl5/Archive/Zip/FileMembe +r.pm line 30 Archive::Zip::FileMember::fh('Archive::Zip::ZipFileMember=HASH +(0x257b610)') called at /usr/share/perl5/Archive/Zip/ZipFileMember.pm + line 381 Archive::Zip::ZipFileMember::rewindData('Archive::Zip::ZipFile +Member=HASH(0x257b610)') called at /usr/share/perl5/Archive/Zip/Membe +r.pm line 1063 Archive::Zip::Member::_writeToFileHandle('Archive::Zip::ZipFil +eMember=HASH(0x257b610)', 'IO::File=GLOB(0x257ba60)', 1, 0) called at + /usr/share/perl5/Archive/Zip/Archive.pm line 420 Archive::Zip::Archive::writeToFileHandle('Archive::Zip::Archiv +e=HASH(0x242d8f8)', 'IO::File=GLOB(0x257ba60)') called at /usr/share/ +perl5/Archive/Zip/Archive.pm line 456 Archive::Zip::Archive::overwriteAs('Archive::Zip::Archive=HASH +(0x242d8f8)', 'ROUTINGS.D150313.T1600.zip') called at ./ziprenamer2.p +l line 17 Can't write to /tmp/2PMKA29PUY.zip at ./ziprenamer2.pl line 17 write error Too many open files
        and only about 1000 files are processed Note I just have to do it once.. the next times I only have to rename the last one arrived.. it will be set as a cron job.

        thank you.

        Hello, I have been trying but it does not work. and the endRead ignored.. any ideas how to put it? I am sorry if the question is trivial.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1140199]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (11)
As of 2024-04-18 16:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found