|
|
|
|
|
|
| Author |
Message |
Paul Lalli *nix forums Guru
Joined: 10 Jun 2005
Posts: 1089
|
Posted: Fri Jul 21, 2006 2:26 pm Post subject:
Re: Need Help with Program in Perl on a Netware Server
|
|
|
fhadzocos@gmail.com wrote:
| Quote: | Here are some of the real file names.
|
*WHY* didn't you include real data in your original post?
| Quote: | 00A0D1B9233C_1153332333000_1.STR
00AD1B44961_1102616538000_556.STR
|
In your original, you made it appear that by "last file" you meant
"file with the greatest suffix, numerically). How, exactly are you
determining "last file" now? And how are you grouping these files?
My program, which I spent a good 10 minutes writing, is not going to
work with your data. You have wasted my time by posting incorrect
requirements and data. That was very rude of you.
Paul Lalli |
|
| Back to top |
|
 |
Paul Lalli *nix forums Guru
Joined: 10 Jun 2005
Posts: 1089
|
Posted: Fri Jul 21, 2006 2:24 pm Post subject:
Re: Need Help with Program in Perl on a Netware Server
|
|
|
fhadzocos@gmail.com wrote:
| Quote: | I have a huge folder with 44 thousand files I need to keep only the
last file for each type in that folder
ex
workstation1.001
workstation1.002
workstation2.49
workstation2.56
workstation20.560
workstation20.561
workstation20.562
In that example I need to keep workstation1.002 workstation2.56
workstation20.562 and this would continue until the end of the files.
There is only one folder to look in.
I have no idea how to go about doing this in perl. I'm very new to perl
and do not wish to make an inefficient program.
|
First, I strongly recommend you create a program that *works* first,
and make it efficient second.
My recommendation is that you loop through the directory, grabbing each
file name. For each file, split it to get the basename and suffix
(see: perldoc File::Basename). Check if the basename exists in your
hash. If not, add it, with a value of the suffix. If it does exist,
compare the current suffix with the one that is already stored. If the
current one is less, remove the current file (perldoc -f unlink). If
the current one is greater, remove the file represented by the basename
and stored suffix, and replace the value with the current suffix.
That English description may be a bit confusing, (and we're always
telling people to Speak Perl rather than English), so here's a short
script to get you started.
#!/usr/bin/perl
use strict;
use warnings;
use File::Basename;
opendir my $dh, $ARGV[0] or die "Cannot open directory $ARGV[0]: $!\n";
my %suffix_of;
while (my $file = readdir($dh)) {
next if $file =~ /^\.\.?$/ or ! -f "$ARGV[0]/$file";
my ($base, undef, $suffix) = fileparse($file, qr/\..*/);
$suffix =~ s/^\.//;
if (! exists $suffix_of{$base} ){
$suffix_of{$base} = $suffix;
}
elsif ($suffix_of{$base} > $suffix) {
unlink "$ARGV[0]/$file" or
warn "Could not remove $ARGV[0]/$file: $!\n";
}
else {
unlink "$ARGV[0]/$base.$suffix_of{$base}" or
warn "Could not remove $ARGV[0]/$base.$suffix_of{$base}:
$!\n";
$suffix_of{$base} = $suffix;
}
}
Paul Lalli |
|
| Back to top |
|
 |
fhadzocos@gmail.com *nix forums beginner
Joined: 21 Jul 2006
Posts: 2
|
Posted: Fri Jul 21, 2006 2:07 pm Post subject:
Re: Need Help with Program in Perl on a Netware Server
|
|
|
Here are some of the real file names.
00A0D1B9233C_1153332333000_1.STR
00AD1B44961_1102616538000_556.STR
Thanks
Mobius1982 |
|
| Back to top |
|
 |
fhadzocos@gmail.com *nix forums beginner
Joined: 21 Jul 2006
Posts: 2
|
Posted: Fri Jul 21, 2006 1:57 pm Post subject:
Need Help with Program in Perl on a Netware Server
|
|
|
I have a huge folder with 44 thousand files I need to keep only the
last file for each type in that folder
ex
workstation1.001
workstation1.002
workstation2.49
workstation2.56
workstation20.560
workstation20.561
workstation20.562
In that example I need to keep workstation1.002 workstation2.56
workstation20.562 and this would continue until the end of the files.
There is only one folder to look in.
I have no idea how to go about doing this in perl. I'm very new to perl
and do not wish to make an inefficient program.
Thanks
Mobius1982 |
|
| Back to top |
|
 |
Google
|
|
| Back to top |
|
 |
|
|
The time now is Thu Dec 04, 2008 7:29 am | All times are GMT
|
|
Mortgage Calculator | Loans | Gas Suppliers | Power Rangers | Mobile Phones
|
|
Copyright © 2004-2005 DeniX Solutions SRL
|
|
|
|
Other DeniX Solutions sites:
Unix/Linux blog |
electronics forum |
medicine forum |
science forum |
|
|
Privacy Policy
|
Powered by phpBB © 2001, 2005 phpBB Group
|
|