http://qs321.pair.com?node_id=662462

tannx has asked for the wisdom of the Perl Monks concerning the following question:

I have slight problem with my script. It does everything I need, except at the end of script it needs to move files into created directory -move ($file,"$kat/$folder_name/")- It gives: Cannot move "file_to_be_moved" No such file or directory But the file and needed directory is there.
#!/usr/bin/perl use warnings; use strict; use POSIX qw(strftime); use File::Copy; my $output_tag = strftime(".%Y%m%d%H%M", localtime); my $failid='/home/rdd/script/konf.aa'; my $kpv = strftime(".%Y%m%d", localtime); my $kat='/home/rdd/archive/rwa'.$kpv; my (@files, $file, $folder_name); if (open(FAILIDcnt, $failid)) { while(my $input = <FAILIDcnt>) { chomp($input); my $output = $input; $output =~ s/\.txt//; $output .= $output_tag; open(IF, '/home/rdd/'.$input) or next; open(OF,'> /var/www/html/rwa_test/input/'.$output) + or die "Can't open $output: $!"; open(OF,'> /home/rdd/archive/copy/'.$output) or die "Can't open $output: $!"; while(my $line = <IF>) { last if $line =~ /^-{19}/; $line =~ s/,/./g; $line =~ s/\t/;/g; print OF "$line"; } close(OF); close(IF); system ("gzip /home/rdd/archive/copy/* "); if (!-e $kat) { mkdir $kat; } else { if (!-d $kat) { die "$kat already exists and is not a folder"; } } opendir(DIR, "/home/rdd/archive/copy/") or die "Can't Open Current Directory: $!"; @files = grep ~ m/^S.\w{2}/, readdir(DIR); close DIR; foreach $file(@files){ if($file =~ m/^S.(\w{2})/){ $folder_name = $1; mkdir ("$kat/$folder_name"); move ($file,"$kat/$folder_name/") or warn "Cannot move $file $!\n"; } } } close (FAILIDcnt); }
Br Tann

Replies are listed 'Best First'.
Re: does not move-- move ($file,"$kat/$folder_name/")
by almut (Canon) on Jan 15, 2008 at 14:05 UTC

    Maybe your current directory isn't set to where $file resides? (opendir doesn't automagically chdir...). It's probably easiest to just prepend the directory to the source path for move.

      To the OP: What he's saying is you should use
      move "/home/rdd/archive/copy/$file", ...
      instead — $file contains just the bare filename.
        You are absolutely right. Problem solved. Thx Tann

        What she's saying...  (otherwise I agree :)