Solved

Need a rucursive renaming script

Posted on 2000-04-11
10
282 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
  • 6
  • 4
10 Comments
 
LVL 20

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
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:mboss
ID: 2704368
the last comment should read

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

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 20

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 20

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

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
LastLogonTimeStamp Attribute 7 49
Linux :how to provide sudo access to the user 13 106
AIX 5.x set up arrow to recall 11 58
Unix Command -- Challenging  question 7 96
A metadevice consists of one or more devices (slices). It can be expanded by adding slices. Then, it can be grown to fill a larger space while the file system is in use. However, not all UNIX file systems (UFS) can be expanded this way. The conca…
FreeBSD on EC2 FreeBSD (https://www.freebsd.org) is a robust Unix-like operating system that has been around for many years. FreeBSD is available on Amazon EC2 through Amazon Machine Images (AMIs) provided by FreeBSD developer and security office…
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.
In a previous video, we went over how to export a DynamoDB table into Amazon S3.  In this video, we show how to load the export from S3 into a DynamoDB table.

856 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