Solved

Need a rucursive renaming script

Posted on 2000-04-11
10
285 Views
Last Modified: 2010-04-21
I'm trying to rename files that were copied from one moiunt point (DISK1) to another (DISK2).  There are many subdirectories that reside under the mount points.  Each directory has files with the a similar naming convention (ie. xxxDISK1xxx).  

The problem is, if I copy all these file to a new mount point (say DISK2).  I have to rename all the files by hand (xxxDISK1XXX -> xxxDISK2xxx).

Ideally, if I can get a script that can take the old name, new name and the full path of the directory affected, that would change the names of all the file, it would be great.

(ie.  rename_all.sh -o DISK1 -n DISK2 -d /home/test/DISK2)

Speediness (but also correctness) will be reward with more points.

Please write back with comments if you are unclear about anything.

Also please post as comments first untill I accept.  So the question doesn't get locked.

Thanks

mboss
0
Comment
Question by:mboss
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 4
10 Comments
 
LVL 21

Expert Comment

by:tfewster
ID: 2704214
Assuming the subdirectories don't have names like ../abcDISK1efg/... !

To do the actual rename, create a little shell script like this (e.g. called mvdtod)
mv $1 `echo $1 | sed s/$2/$3/`

To use it, do: cd /DISK2; find . -exec /path/to/mvdtod {} DISK1 DISK2 \;



0
 

Author Comment

by:mboss
ID: 2704259
That works great!!  Thanks for the quick response.

Is there a way to do this by specifying the directory I want (not being in the directory)?
0
 

Author Comment

by:mboss
ID: 2704300
Also, what does the "\" in the command line?

Just trying to learn.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:mboss
ID: 2704368
the last comment should read

what does the "\" do in the command line?
0
 
LVL 21

Accepted Solution

by:
tfewster earned 300 total points
ID: 2704371
You could do "find /DISK2 -name "*DISK1*" -exec /path/to/mvdtod {} DISK1 DISK2 \;

This would stop you getting the error messages my original idea gives you when it tries to excute "mv abc abc" , as it will only try to rename files that actually meet the name criteria!

Is this a one-off, or do you want it tidied up (to your original specification) so someone else can just run it?
0
 
LVL 21

Expert Comment

by:tfewster
ID: 2704413
The "\" or "escape" tells the shell not to interpret the following character, so the ";" terminates the "-exec " construct, rather than being interpreted as the end of the command line...

man find:

-exec cmd               True if the executed cmd returns a zero value
                               as exit status.  The end of cmd must be
                               punctuated by a semicolon (semicolon is
                               special to the shell and must be escaped).
                               Any command argument {} is replaced by the
                               current path name.
0
 

Author Comment

by:mboss
ID: 2704796
Adjusted points from 250 to 300
0
 

Author Comment

by:mboss
ID: 2704797
Everything is working fine.  I'm increasing points to 300, and accepting your answer.

Thanks again

mboss
0
 
LVL 21

Expert Comment

by:tfewster
ID: 2704926
Thanks! I was thinking about a neater script to do the copy from PATH1 to PATH2 & do the appropriate file renaming at the same time - Is that any use to you, or was this a one-off disk reorganisation?
0
 

Author Comment

by:mboss
ID: 2704964
No, the files aren't being copied, they're being restored from tape.  But thanks anyway.  I will probably have another script question either end of day today or tomorrow.  I look forwarded to hearing your ideas about that one.  It will be a little more tricky....I think :)

mboss
0

Featured Post

Enroll in May's Course of the Month

May’s Course of the Month is now available! Experts Exchange’s Premium Members and Team Accounts have access to a complimentary course each month as part of their membership—an extra way to increase training and boost professional development.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In tuning file systems on the Solaris Operating System, changing some parameters of a file system usually destroys the data on it. For instance, changing the cache segment block size in the volume of a T3 requires that you delete the existing volu…
Introduction Regular patching is part of a system administrator's tasks. However, many patches require that the system be in single-user mode before they can be installed. A cluster patch in particular can take quite a while to apply if the machine…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question