Renaming Multiple Files by removing characters


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Renaming Multiple Files by removing characters
# 1  
Old 08-25-2014
Renaming Multiple Files by removing characters

Hi

I would like to rename Multiple files in a Unix Directory using Ksh Command.

Eg ATT8-2011-10-01 00:00:00-MSA-IMM-SINGLE_AND_FAMILY_COVERAGE-DED-$2000-X114817.PDF

needs to be renamed as

ATT8-2011-10-01-MSA-IMM-SINGLE_AND_FAMILY_COVERAGE-DED-$2000-X114817.PDF

Basically the time portion which is always 00:00:00 needs to be stripped off and the space between the date and the next hyphen symbol (-) needs to be compressed.

Any ideas as to how to this ? Assuming they are about 3000 files in the directory.

Last edited by Don Cragun; 08-25-2014 at 10:59 PM.. Reason: Add ICODE tags.
# 2  
Old 08-25-2014
Lightbulb

Code:
$ touch "ATT8-2011-10-01 00:00:00-MSA-IMM-SINGLE_AND_FAMILY_COVERAGE-DED-$2000-X114817.PDF"
$ ls *.PDF
ATT8-2011-10-01 00:00:00-MSA-IMM-SINGLE_AND_FAMILY_COVERAGE-DED-000-X114817.PDF
$ rename 's/\ 00:00:00//' *.PDF
$ ls *.PDF
ATT8-2011-10-01-MSA-IMM-SINGLE_AND_FAMILY_COVERAGE-DED-000-X114817.PDF
$

However, run the "no action" option first and double-check if it spits the right result.
Code:
       -n, --no-act
               No Action: show what files would have been renamed.

Nonetheless, a making a backup of directory containing the files prior to the actual renaming process is *highly* recommended. You never know...
# 3  
Old 08-25-2014
@junior-helper: thread opener stated he uses Korn shell, so chances are this is not a Linux system at all. There is a good chance that the "rename"-command is not there.

Quote:
Originally Posted by pchegoor
I would like to rename Multiple files in a Unix Directory using Ksh Command.

Eg ATT8-2011-10-01 00:00:00-MSA-IMM-SINGLE_AND_FAMILY_COVERAGE-DED-$2000-X114817.PDF

needs to be renamed as

ATT8-2011-10-01-MSA-IMM-SINGLE_AND_FAMILY_COVERAGE-DED-$2000-X114817.PDF
Basically this is a simple job: create a loop in which you run a command mv "$oldname" "$newname" in which you rename one file after the other:

Code:
find /path/to/your/files -type <f -name optional-file-mask> |\
while read OLDNAME ; do
     mv "$OLDNAME" "$NEWNAME"
done

Which leaves the question where "$NEWNAME" comes from. You could use any text-modifying utility (sed, awk, ....) of which Unix is so rich of to construct the new name from the old. This utility would be called once for every single file and this would add a lot of overhead to your script, which should be avoided.

Fortunately the shell itself offers a great way to modify strings too, without having to resort to an external utility: the "parameter expansion" or "variable epansion". The syntax looks awkward at first, but its execution speed beats every external utility by some order of magnitude. Twenty lines of this is perhaps still way faster than a single awk- (sed-, ...) call.

I suggest having a look into the man page for details, here is the solution for your problem as you stated it: remove a middle " 00-00-00" from a string:

Code:
find /path/to/your/files -type <f -name optional-file-mask> |\
while read OLDNAME ; do
     chBegin="${OLDNAME%% 00:00:00*}"
     chEnd="${OLDNAME##* 00:00:00}"
     NEWNAME="${chBegin}${chEnd}"
     print - "OLDNAME: $OLDNAME"
     print - "chBegin: $chBegin    chEnd: $chEnd"
     print - "NEWNAME: $NEWNAME"

     print - mv "$OLDNAME" "$NEWNAME"
done

Run with the print-statements to see how it works, remove them once you feel comfortable with the output.

I hope this helps.

bakunin
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Removing characters from beginning of multiple files

Hi, I have been searching how to do this but I can't seem to find how to do it. Hopefully someone can help. I have multiplr files, 100's example 12345-zxys.213423.zyz.txt. I want to be able to take all these files and remove the first '12345-' from each of the files. '12345-' these characters... (5 Replies)
Discussion started by: israr75
5 Replies

2. Shell Programming and Scripting

Shell Script Help..Renaming Quoted files removing the timestamp

Hi all, i am new to this forum, unix and shell scripting. I would really appreciate if you all can help me here.. I have files coming in the below format 'filename20513'13May06:03:45 filename are characters.. like 'ABDDUT20513'13May06:03:45 i need it to be renamed as... (17 Replies)
Discussion started by: khman
17 Replies

3. Shell Programming and Scripting

Renaming multiple files in sftp server in a get files script

Hi, In sftp script to get files, I have to rename all the files which I am picking. Rename command does not work here. Is there any way to do this? I am using #!/bin/ksh For eg: sftp user@host <<EOF cd /path get *.txt rename *.txt *.txt.done ... (7 Replies)
Discussion started by: jhilmil
7 Replies

4. UNIX for Dummies Questions & Answers

Renaming multiple files

Hi, Can we rename multiples files using find or awk utility? Now I am doing it using for loop and getting the file name and in side the loop using the mv command. Like ine need t rename all txt files to doc file. For example a1.txt => a1.doc a2.txt => a2.doc a3.txt => a3.doc myfile.txt... (2 Replies)
Discussion started by: siba.s.nayak
2 Replies

5. Shell Programming and Scripting

renaming multiple files

I have to rename 100+ files at a time on the server & was trying to use a script for doing that. I have used ultra edit to create a file having current filename & new file name as below file234.txt | file956.txt file687.txt | file385.txt There is no fixed pattern while renaming & would... (20 Replies)
Discussion started by: crux123
20 Replies

6. UNIX for Dummies Questions & Answers

Removing prefix from multiple files and renaming file extension

Hello i have the files in this format pdb1i0t.ent pdb1lv7.ent pdb1pp6.ent pdb1tj2.ent pdb1xg2.ent pdb2b4b.ent pdb2ewe.ent Now i have to remove the prefix pdb from all the files and also i need to change the extension of .ent to .txt The new file should look like this ... (3 Replies)
Discussion started by: empyrean
3 Replies

7. Shell Programming and Scripting

Renaming multiple files

hi, I've a machine running RHEL3,kernel version 2.4. i need to rename multiple files under one directory as follows: ls demo.c demo.S demo-1243.sw demo.xyz and now i need to replace the occurrence of demo with demo_1 for each of the above file. the tedious way is to go ahead and do mv on... (2 Replies)
Discussion started by: amit4g
2 Replies

8. UNIX for Dummies Questions & Answers

Renaming multiple files

Help! I was trying to rename multiple files. Like in DOS, i decided to use wildcards and now i am missing some files. Any ideas on how to recover them? Or find out where the files went? I had these 3 files resume1.log elecresume.log compresume.log The command I ran was mv *.log *.log.bak... (6 Replies)
Discussion started by: rmayur
6 Replies

9. Shell Programming and Scripting

Renaming multiple files

Can someone please tell me how I can rename a bunch of files at a time. I hava a directory that has 700+ files that are named *.xyz and I would like to rename them to *.abc . How can I do that with a simple command ? mv *.xyz *.abc did not work. Thanks in advance (4 Replies)
Discussion started by: jxh461
4 Replies

10. UNIX for Dummies Questions & Answers

renaming multiple files

Hi to everyone!!. Here's my stupid question of the day. When I have to rename a file I use "mv filename newfilename". But what about renaming multiple files, for example if I want to add the prefix "old" to several image files (in fact it's what I wanted to do..). Thanks in advance.... :D (6 Replies)
Discussion started by: piltrafa
6 Replies
Login or Register to Ask a Question