tia_kamakshi
asked on
Finding modified date of the file and moving file to folder in perl
Hi,
In perl how do I take the file modified date and create folder with name
archiveold/yyyy/MM/dd
suppose file modified date is 25-Oct-2010
If not exists then folders created should be
archiveold/2010/Oct/25
then I wanted to move the file to its relevant date folder
while (*.xml) {
chomp;
$file=$_ ;
# suppose file modified date is 25-Oct-2010
# create folders at path archiveold/2010/Oct/25 if dos not exists
# move file in folder 'archiveold/2010/Oct/25'
}
Please guide
In perl how do I take the file modified date and create folder with name
archiveold/yyyy/MM/dd
suppose file modified date is 25-Oct-2010
If not exists then folders created should be
archiveold/2010/Oct/25
then I wanted to move the file to its relevant date folder
while (*.xml) {
chomp;
$file=$_ ;
# suppose file modified date is 25-Oct-2010
# create folders at path archiveold/2010/Oct/25 if dos not exists
# move file in folder 'archiveold/2010/Oct/25'
}
Please guide
ASKER
Hi,
Thanks for your code
When I am running my code below, then I am getting the error saying
"make_path" is not exported by the File::Path module
Can't continue after import errors at ./archiveFiles.pl line 4
BEGIN failed--compilation aborted at ./archiveFiles.pl line 4.
Please guide
Many Thanks
Thanks for your code
When I am running my code below, then I am getting the error saying
"make_path" is not exported by the File::Path module
Can't continue after import errors at ./archiveFiles.pl line 4
BEGIN failed--compilation aborted at ./archiveFiles.pl line 4.
Please guide
Many Thanks
#!/usr/bin/perl
use POSIX;
use File::Path qw(make_path);
my $srcdir = "/home/dbali/config/";
opendir(DIR, $srcdir) or die "Can't open $srcdir: $!";
my @files = grep { /\.*$/i } readdir(DIR);
foreach my $file (@files) {
my $path=strftime"archiveold/%Y/%m/%d",localtime((stat)[9]);
make_path $path;
rename $_,"$path/$_" or warn "$path/$_ $!";
}
What version of File::Path do you have?
does
use File::Path;
mkpath $path;
work?
Also, if you are using $file as your loop variable, then
localtime((stat)[9])
should be
localtime((stat "$srcdir/$file")[9]);
and
rename $_,"$path/$_"
should be
rename "$srcdir/$file","$path/$fi le";
also, /\.*$/i always matches, since all strings have zero or more "." before the end
so the grep is a noop
does
use File::Path;
mkpath $path;
work?
Also, if you are using $file as your loop variable, then
localtime((stat)[9])
should be
localtime((stat "$srcdir/$file")[9]);
and
rename $_,"$path/$_"
should be
rename "$srcdir/$file","$path/$fi
also, /\.*$/i always matches, since all strings have zero or more "." before the end
so the grep is a noop
ASKER
Many Thanks for your reply
I need all types of files
what should I write instead of /\.*$/i in my below code to list all files regardless of any extension.
But list should not folders and files in subdirectories
my @files = grep { /\.*$/i } readdir(DIR);
Many Thanks for your help
I need all types of files
what should I write instead of /\.*$/i in my below code to list all files regardless of any extension.
But list should not folders and files in subdirectories
my @files = grep { /\.*$/i } readdir(DIR);
Many Thanks for your help
ASKER
Hi,
I have modified my code to below. It is giving me error saying
Use of uninitialized value in -d at /usr/share/perl/5.8/File/P ath.pm line 143.
fileparse(): need a valid pathname at /usr/share/perl/5.8/File/P ath.pm line 144
Also, please help me in fixing
I need all types of files
what should I write instead of /\.*$/i in my below code to list all files regardless of any extension.
But list should not folders and files in subdirectories
my @files = grep { /\.*$/i } readdir(DIR);
Please guide
Thanks,
I have modified my code to below. It is giving me error saying
Use of uninitialized value in -d at /usr/share/perl/5.8/File/P
fileparse(): need a valid pathname at /usr/share/perl/5.8/File/P
Also, please help me in fixing
I need all types of files
what should I write instead of /\.*$/i in my below code to list all files regardless of any extension.
But list should not folders and files in subdirectories
my @files = grep { /\.*$/i } readdir(DIR);
Please guide
Thanks,
#!/usr/bin/perl
use POSIX;
use File::Path;
mkpath $path;
my $srcdir = "/home/dbali/config/";
opendir(DIR, $srcdir) or die "Can't open $srcdir: $!";
my @files = grep { /\.*$/i } readdir(DIR);
foreach my $file (@files) {
my $path=strftime"archiveold/%Y/%m/%d",localtime((stat "$srcdir/$file")[9]);
make_path $path;
rename "$srcdir/$file","$path/$file";
}
to get all files, just use
my @files = readdir(DIR);
to omit directories, use
grep{ !-d "$srcdir/$_"} readdir(DIR);
to list only plain files, use
grep{ -f "$srcdir/$_"} readdir(DIR);
mkpath $path; should be inside the loop after $path is defined, where you now have make_path $path;
since you told me that your version of File::Path does not export that name
my @files = readdir(DIR);
to omit directories, use
grep{ !-d "$srcdir/$_"} readdir(DIR);
to list only plain files, use
grep{ -f "$srcdir/$_"} readdir(DIR);
mkpath $path; should be inside the loop after $path is defined, where you now have make_path $path;
since you told me that your version of File::Path does not export that name
ASKER
Many Thanks for your replies.
I am sorry for late response. I was out of station last week.
I will get back to you today on this. Once again appologise for late response
I am sorry for late response. I was out of station last week.
I will get back to you today on this. Once again appologise for late response
ASKER
Hi,
I have modified the code and it is giving me below error saying
dbali@pbms-tstva2:~$ ./archiveFiles.pl
Can't locate object method "make_path" via package "archiveold/2010/02/04" (perhaps you forgot to load "archiveold/2010/02/04"?) at ./archiveFiles.pl line 14.
dbali@pbms-tstva2:~$
Please find my updated code
Please guide
Many Thanks
I have modified the code and it is giving me below error saying
dbali@pbms-tstva2:~$ ./archiveFiles.pl
Can't locate object method "make_path" via package "archiveold/2010/02/04" (perhaps you forgot to load "archiveold/2010/02/04"?) at ./archiveFiles.pl line 14.
dbali@pbms-tstva2:~$
Please find my updated code
Please guide
Many Thanks
#!/usr/bin/perl
use POSIX;
use File::Path;
my $srcdir = "/home/dbali/config/";
opendir(DIR, $srcdir) or die "Can't open $srcdir: $!";
my @files = grep{ !-d "$srcdir/$_"} readdir(DIR);
foreach my $file (@files) {
my $path=strftime"archiveold/%Y/%m/%d",localtime((stat "$srcdir/$file")[9]);
mkpath $path;
make_path $path;
rename "$srcdir/$file","$path/$file";
}
Apparently, your version of File::Path has only mkpath not make_path.
So use mkpath not make_path
So use mkpath not make_path
ASKER
Many Thanks.
Now my script is working good.
But my files are not moving to destination directory
Please guide
Now my script is working good.
But my files are not moving to destination directory
Please guide
#!/usr/bin/perl
use POSIX;
use File::Path;
my $srcdir = "/home/dbali/config/";
opendir(DIR, $srcdir) or die "Can't open $srcdir: $!";
my @files = grep{ !-d "$srcdir/$_"} readdir(DIR);
foreach my $file (@files) {
my $path=strftime"archiveold/%Y/%b/%d",localtime((stat "$srcdir/$file")[9]);
mkpath $srcdir.$path;
rename "$srcdir/$file","$srcdir.$path/$file";
}
ASKER
I wanted to give a 100% points to ozo solution. By mistake request is gone for closure. Please allocate all 500 points to ozo.
Many Thanks
Many Thanks
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
ASKER
Please allocate all 500 points to Ozo or please let me know how do I do it????
use File::Path qw(make_path);
while( <*.xml> ){
my $path=strftime"archiveold/
make_path $path;
rename $_,"$path/$_" or warn "$path/$_ $!";
}