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

I have a folder which is having 1200 files,all the file names are have maximum of 8 character length.I need to remove last character from each of the filnames and prefix it with character "A"

by perladdict (Chaplain)
on Feb 20, 2013 at 18:35 UTC ( #1019820=perlquestion: print w/ replies, xml ) Need Help??
perladdict has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks, Below is the code i am trying to list the filnames in a directory
#!/usr/bin/perl $dir = "C:\\Users\\user\\Desktop\\test"; opendir DIR, $dir or die "error: cannot open directory \"$dir\" $!"; @files = sort grep (!/^\.$|^\.\.$/, readdir(DIR)); closedir (DIR); print "@files\n";
Once after listing all the filenames, i need validate each of the filenames should note exceed 8 characters. If files names which is having 8 characters and less than 8 characters i need to remove last charecter from each of the file names and prefix it with character "A"
All the filenames having .doc extention,below are the sample files names in a folder.
PBILLSTA.doc PBGISCTX.doc BGISCTXL.doc P537_LC.doc AODG.doc MAD004PN.doc
Please advice me, which perl fucntion i need to use in order to remove last charecters from the filename if it is having 8 characters and prefix the filename with character "A"
For the filenames which is having less than 8 charecters i just need to prefix "A" to each without removing last character.

Comment on I have a folder which is having 1200 files,all the file names are have maximum of 8 character length.I need to remove last character from each of the filnames and prefix it with character "A"
Select or Download Code
Re: I have a folder which is having 1200 files,all the file names are have maximum of 8 character length.I need to remove last character from each of the filnames and prefix it with character "A"
by MidLifeXis (Prior) on Feb 20, 2013 at 18:38 UTC

    See rename, split, join, length, and substr for some ideas. You may also want to see -e to check if a file or directory exists. Before using rename, you will likely want to do a test run with just printing.

    --MidLifeXis

      Thanks MidLifeXis, As per your inputs i have tried to implement this,Below is the code i tried it,i am able to succeed to rename all tons of files in my directory.
      #!/usr/bin/perl $dir = "C:\\Users\\user\\Desktop\\test"; opendir DIR, $dir or die "error: cannot open directory \"$dir\" $!"; @files = sort grep (!/^\.$|^\.\.$/, readdir(DIR)); closedir (DIR); foreach $fl(@files) { if($fl =~ m/\.doc/) { @a = split(/\.doc/,$fl); foreach $len(@a) { $z = length $len; if($len <= $z) { @x = substr($len,0,7); foreach $mod(@x) { $mod = "A".$mod.".doc"; rename $fl,$mod; } } } } }

        Grep pattern used for getting files can be modified to reduce the for loop iteration as you're going to rename only file names which are less than or equal to 8 characters with .doc extension.

        @files = sort grep /^.{1,8}\.doc$/, readdir(DIR);
Re: I have a folder which is having 1200 files,all the file names are have maximum of 8 character length.I need to remove last character from each of the filnames and prefix it with character "A"
by SuicideJunkie (Priest) on Feb 20, 2013 at 18:44 UTC

    That could also be a job for a regular expression.

    Capture up to 7 symbols, then have an optional single symbol, then capture a literal dot and up to three more characters. Then rename the file to 'A' . $1 . $2

    The last step is to realize that things have gone horribly wrong with your requirements as stated, when you notice that you are not guaranteed to have unique filenames after losing the last letter, and files start conflicting with each other.

Re: I have a folder which is having 1200 files,all the file names are have maximum of 8 character length.I need to remove last character from each of the filnames and prefix it with character "A"
by moritz (Cardinal) on Feb 20, 2013 at 20:13 UTC
Reaped: Re: I have a folder which is having 1200 files,all the file names are have maximum of 8 character length.I need to remove last character from each of the filnames and prefix it with character "A"
by NodeReaper (Curate) on Feb 21, 2013 at 04:37 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1019820]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (11)
As of 2014-07-22 08:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (108 votes), past polls