Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: Renaming files in directory (updated)

by haukex (Archbishop)
on Jan 05, 2018 at 21:02 UTC ( [id://1206786]=note: print w/replies, xml ) Need Help??


in reply to Renaming files in directory

There are quite a few ways in which the code you showed can be improved.

  • You should use lexical filehandles, or rather in this case directory handles.
  • As documented in readdir, you need to prefix the directory name to the filenames returned, for example with catfile from File::Spec.
  • readdir will return every entry in the directory, including other directories, which you can filter with -X, and including the special entires . and .., which you can filter e.g. with no_upwards from File::Spec.
  • You should check the return value of move for errors.
  • I don't quite understand why you want to rename all the files to single letters, but consider this: what happens if readdir happens to return the filenames in a random order, or more filenames than you have letters for? This is why below I use sort and Perl's magic string increment.
#!/usr/bin/env perl use warnings; use strict; use File::Copy qw/move/; use File::Spec::Functions qw/no_upwards catfile/; my $dir = "/home/porter/blue"; opendir my $dh, $dir or die "$dir: $!"; my @files = grep {-f} map {catfile $dir, $_} sort +no_upwards readdir $dh; closedir $dh; my $newname = "a"; for my $file (@files) { my $newfile = catfile($dir,$newname); print "$file -> $newfile\n"; # Debug move $file, $newfile or warn "$file: $!"; $newname++; }

Update: Fixed: "sort no_upwards" was not correct, but the -f test was hiding the issue.

Log In?
Username:
Password:

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

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

    No recent polls found