LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   To rename files in a directory should I use Bash script or a Perl Script ? (https://www.linuxquestions.org/questions/programming-9/to-rename-files-in-a-directory-should-i-use-bash-script-or-a-perl-script-615365/)

jamtech 01-21-2008 11:05 PM

To rename files in a directory should I use Bash script or a Perl Script ?
 
I am using Suse 10.2 on a HP Compaq NX6325 Notebook with 2gigs of ram. I have a USB Ext. drive 500G. with over 1,000 files that have to be renamed in succeeding order of numbers meaning 1,2,3,4, with a date (Date that the file was renamed).

My question is should I create a Perl script or a Bash Script to rename the files and should I rename them in blocks of 200 and move the renamed files to another directory?

The catch is I will have to use the system in question to do my day to day work like email creating docs and surfing the web.

So the script once running can not be taxing on the system and has to be very fast since the files in question has to be renamed with in a 3 day period.

I know this may start a Flame war.

Thank you for you help and advise in advance

chrism01 01-21-2008 11:08 PM

Not quite sure what you mean by 'renamed in succeeding order of numbers meaning 1,2,3,4', but Perl is faster (compiled rather than interpreted) and it's better if the selection/matching criteria gets complicated.
Otherwise, use bash ... your choice.

jamtech 01-21-2008 11:24 PM

chrism01,

I should clarify my question I need to have the files renamed in sequence with a date added to the file as part or the rename process

chrism01 01-21-2008 11:37 PM

Either lang should do want you want within the time limit.
Note that the mv cmd enables you to rename at the same same eg

mv afile.dat bfile.dat

iirc, this (mv) can only be used between dirs on the same (physical) disk partition, otherwise you have to copy (cp), then delete (rm) the original version.
There's no need to use blocks of 200, just do them one at a time as you go eg (pseudo-code)
Code:

for file in list
do
    newfile = create newfilename
    mv file newfilename
done


jlinkels 01-22-2008 05:21 AM

Renaming 1000 files will not put any stress on your system. If you are only renaming them, they are, well, renamed and not copies, no large data transfer involved. I routinely rename batches of 100 files on my system and the slowest is the verbose output to my screen. 5-10 seconds?

jlinkels

bigearsbilly 01-22-2008 05:35 AM

a safety hint,

I usually write a script to echo the command to stdout, then capture and run it
through a shell, so you have a record of what you have done if you need
to reverse it:

Code:

for file in *; do
  echo mv $file $file.old
done

so it echoes to stdout like:
Code:

mv 1 1.old
mv 1.c 1.c.old
mv 1.pl 1.pl.old
mv 1.sh 1.sh.old
mv 11 11.old

so do somehting like:
Code:

move_script > output
# check the output file looks okay
sh output
# you have a record of what happened


ntubski 01-22-2008 07:48 PM

Quote:

Originally Posted by chrism01 (Post 3030957)
iirc, this (mv) can only be used between dirs on the same (physical) disk partition, otherwise you have to copy (cp), then delete (rm) the original version.

This is not true. mv works fine regardless of filesystems. Of course behind the scenes the physical copying will take place if you mv across filesystems, but you don't have to do it manually.

chrism01 01-22-2008 11:25 PM

In the old days that wasn't always true... eg:

info mv
"Prior to version `4.0' of the fileutils, `mv' could move only regular files between file systems."

From perl docs re (Perl) rename cmd
"Behavior of this function varies wildly depending on your system implementation. For example, it will usually not work across file system boundaries, even though the system mv command sometimes compensates for this."


guess i'm getting old ;)


All times are GMT -5. The time now is 08:45 PM.