How to rename multiple file names?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to rename multiple file names?
# 1  
Old 05-05-2015
How to rename multiple file names?

Hi all,

I need to rename more file name in one command or script.
The files have this structure:

XxY - filename.doc

where X and Y are numbers and the x is the letter itself.

I need to rename these files with this structure:

string.S0XEY.filename.doc

the string is a suffix that changes time to time.
# 2  
Old 05-06-2015
Renaming can be done using mv command. But you cannot rename multiple files at once. You need to script it. I can think of one solution:
Have two arrays with the values of X and Y. Loop over them and for each value of X and Y, rename the file to desired format.
Try it out and let us know.

Something like this:
Code:
X=( 1 2 3 4 5 )
Y=( 2 3 4 5 6 )
idx=0
while idx < length_of_array
do
    mv "form_source_file_name_string_yourself" "form_destination_file_name_string_yourself"
    increment idx
done


Last edited by balajesuri; 05-06-2015 at 01:08 AM..
# 3  
Old 05-06-2015
Store all file name in one temporary file
Code:
ls *filename*.doc > Temp.tmp

Now use the loop to remove value line by line

Code:
For Line in $(cat Temp.tmp);
do mv Line "yourSting".line;
done

This will give a good idea on how to do it

Last edited by Corona688; 05-06-2015 at 12:14 PM..
# 4  
Old 05-06-2015
Try
Code:
ls *.doc | while read FN; do echo mv "$FN" "string.S0${FN:0:1}E${FN:2:1}.${FN##* }"; done

; remove the echo when happy.
# 5  
Old 05-06-2015
Quote:
Originally Posted by ibrar Ahmad
Store all file name in one temporary file
ls *filename*.doc > Temp.tmp

Now use the loop to remove value line by line

For Line in $(cat Temp.tmp);
do mv Line "yourSting".line;
done

This will give a good idea on how to do it
This is bad advice. That is a useless use of cat and a useless use of ls * and a useless use of backticks, not to mention a dangerous use of backticks! Also, a pointless use of temporary file. I often see two or three of these habits, but to see all five of them simultaneously is interesting. Remember that ls doesn't expand *, the shell does, so you can feed it straight into for.

A simpler and safer version is
Code:
for FILE in *filename*.doc
do
        echo mv "$FILE" some-destination-string
done

Remove the echo once you've gotten some-destination-string as exactly what you want it to be.

Rudic, yours is better, but there's no point using a pipe there -- too many arguments for for would also be too many arguments for ls, it doesn't help you.
# 6  
Old 05-06-2015
What i do, looks like:
(might be a little overkill for such a simple substitution, but for certain sed commands, this preview is just 'required' (feels alot more saver)!
(as in, i would had deleted (renamed to empty) quite a few files already)
Code:
:) vid $ cmd=tui-echo
+ vid $ for f in sc* ;do $cmd "$f" "${f/screen/Desktop}"; done
# | screen-.mkv                                                                                     Desktop-.mkv | #
# | screen-out.0.mkv                                                                           Desktop-out.0.mkv | #
# | screen-out.10.mkv                                                                         Desktop-out.10.mkv | #
# | screen-out.11.mkv                                                                         Desktop-out.11.mkv | #
# | screen-out.11.webm                                                                       Desktop-out.11.webm | #
# | screen-out.1.mkv                                                                           Desktop-out.1.mkv | #
# | screen-out.2.mkv                                                                           Desktop-out.2.mkv | #
# | screen-out.3.mkv                                                                           Desktop-out.3.mkv | #
# | screen-out.4.mkv                                                                           Desktop-out.4.mkv | #
# | screen-out.5.mkv                                                                           Desktop-out.5.mkv | #
# | screen-out.6.mkv                                                                           Desktop-out.6.mkv | #
# | screen-out.7.mkv                                                                           Desktop-out.7.mkv | #
# | screen-out.8.mkv                                                                           Desktop-out.8.mkv | #
# | screen-out.9.mkv                                                                           Desktop-out.9.mkv | #
# | screen-out.mkv                                                                               Desktop-out.mkv | #
+ vid $ cmd=mv
+ vid $ for f in sc* ;do $cmd "$f" "${f/screen/Desktop}"; done
✔ vid $ ll D*{mkv,webm}
-rw-rw-r--. 1 sea sea 1.8M 28. Mär 23:44 Desktop-.mkv
-rw-rw-r--. 1 sea sea 593M  7. Mär 23:17 Desktop-out.0.mkv
-rw-rw-r--. 1 sea sea 267K  4. Mai 10:05 Desktop-out.10.mkv
-rw-rw-r--. 1 sea sea  15M  4. Mai 10:10 Desktop-out.11.mkv
-rw-rw-r--. 1 sea sea  13M  4. Mai 11:15 Desktop-out.11.webm
-rw-rw-r--. 1 sea sea 318K 27. Mär 16:39 Desktop-out.1.mkv
-rw-rw-r--. 1 sea sea 1.1M 28. Mär 08:04 Desktop-out.2.mkv
-rw-rw-r--. 1 sea sea 2.5M 28. Mär 12:29 Desktop-out.3.mkv
-rw-rw-r--. 1 sea sea 1.5M 28. Mär 12:35 Desktop-out.4.mkv
-rw-rw-r--. 1 sea sea 805K 28. Mär 17:31 Desktop-out.5.mkv
-rw-rw-r--. 1 sea sea 789K 28. Mär 17:42 Desktop-out.6.mkv
-rw-rw-r--. 1 sea sea  73M 30. Mär 11:13 Desktop-out.7.mkv
-rw-rw-r--. 1 sea sea  98M  4. Apr 11:23 Desktop-out.8.mkv
-rw-rw-r--. 1 sea sea  19M 30. Mär 12:26 Desktop-out.9.mkv
-rw-rw-r--. 1 sea sea  70M 27. Mär 15:11 Desktop-out.mkv
:) vid $

hth & hf


EDIT:
What i'm saying is:
The more files you have (to rename), the more important it is to PRE-view the changes that will be done.
And having the strings aligned left and right of the screen/window just helps to compare, rather than having a list that is just space delimited. imho

All you need to do is to define a 'prefix' string, and add it in front of RudiC's example.

Last edited by sea; 05-06-2015 at 12:43 PM..
# 7  
Old 05-06-2015
Hi.

For Debian (this from Jessie):
Code:
NAME
       rename - renames multiple files

SYNOPSIS
       rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
       [ files ]

... -- see man rename

For RedHat (this from Fedora 19, similar one available from CentOS 6.4 )
Code:
NAME
       rename - rename files

SYNOPSIS
       rename [options] expression replacement file...

DESCRIPTION
       rename  will  rename  the specified files by replacing the first occur‐
       rence of expression in their name by replacement.

You may also be able to find an old shell script:
Code:
# @(#) mved     Rename, change filename by mv-ing with special pattern, =.
# $Id: mved 291 2007-10-23 11:26:32Z dennisl $
# See: http://raf.org/mved/

# From comp.sources.wizards & Martin Marietta at ornl, off Usenet.
# 90.09.27.
# mved.sh
# Move-and-edit filenames.
#
#       Usage: mved [-n] from-pattern to-pattern
...

Note that the three are different from one another.

Best wishes ... cheers, drl
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Checking Multiple File existance in a UNIX folder(Note: File names are all different)

HI Guys, I have some 8 files with different name and extensions. I need to check if they are present in a specific folder or not and also want that script to show me which all are not present. I can write if condition for each file but from a developer perspective , i feel that is not a good... (3 Replies)
Discussion started by: shankarpanda003
3 Replies

2. Shell Programming and Scripting

Trying to do multiple dir's and multiple file names etc.

What am I missing? find: 0652-009 There is a missing conjunction find: 0652-009 There is a missing conjunction find: 0652-009 There is a missing conjunction find: 0652-009 There is a missing conjunction find: 0652-009 There is a missing conjunction find: 0652-009 There is a missing... (3 Replies)
Discussion started by: xgringo
3 Replies

3. Shell Programming and Scripting

Multiple file rename

I've been googling for days but can't find a solution to this problem. I have a number of sets of files on a server file02.dat . . file12.dat /.../fred(1 to n)/bill(1 to m)/tony/joe/ in any "fred" branch there will be one or more "bill"s some joe/'s may not have a fileset and... (4 Replies)
Discussion started by: Sabreur
4 Replies

4. UNIX for Dummies Questions & Answers

Multiple file rename

hi im new to linux and was just wondering if some 1 could help me i have folders with T.V. series in them and i would like to delete part of the filename e.g. (series name).s01e01.(episode name) (series name).s01e02.(episode name) (series name).s01e03.(episode name) (series... (4 Replies)
Discussion started by: stevemcd1990
4 Replies

5. Shell Programming and Scripting

change multiple file names

Hi is it possible to change multiple files (~10k) names with out disturbing the data in it. ? input Hynda|cgr10(+):100027702-1000312480|.txt Hynda|cgr10(+):100027702-1000312483|.txt Hynda|cgr10(+):100027702-1000312484|.txt Hynda|cgr10(+):100027702-1000312482|.txt output... (4 Replies)
Discussion started by: quincyjones
4 Replies

6. Shell Programming and Scripting

Rename multiple file names in a directory

I hope some one can help me I have multiple files in a directory with out extension like as below mentioned. But i want to change all the file names along .DDMMYYYYHHMISS format. And all files should have same DDMMYYYYHHMISS. Scenario: direcory name = /vol/best/srcfiles files in a... (4 Replies)
Discussion started by: hari001
4 Replies

7. Shell Programming and Scripting

Change multiple file names

Hello, I have some files in a directory like: 01_07_2010_aa.txt 01_07_2010_bb.txt 01_07_2010_cc.txt 01_07_2010_dd.txt 01_07_2010_ee.txt 01_07_2010_ff.txt I want to change their names to : 3nm_aa.txt 3nm_bb.txt 3nm_cc.txt 3nm_dd.txt 3nm_ee.txt 3nm_ff.txt (8 Replies)
Discussion started by: ad23
8 Replies

8. Shell Programming and Scripting

Find and rename long file names (html)

Hi Guys, I need a help. I have 1130 zip files. Each one of them has files including 1 html file with long file name (includes special charactors, Alphabetic and numbers). I have copied all 1130 zip files to my linux system and extracted using below command. Find . -name "*.zip" -exec... (7 Replies)
Discussion started by: Rajmani
7 Replies

9. UNIX for Dummies Questions & Answers

Editing multiple file names in one go

Hi there, I have a folder full of pdf's and I've run a compression on the to reduce the size, the output of the compress places a '-o' in the name of the file. Before 12345.pdf After 12345-o.pdf Now I've got around 50000 files that I need to change back to the previous name, is... (3 Replies)
Discussion started by: KeesH
3 Replies

10. UNIX for Dummies Questions & Answers

Help with multiple file rename - change case of part of file name

Hi there, I hope someone can help me with this problem : I have a directory (/var/www/file/imgprofil) which contains about 10000 JPG files. They have a naming convention thus : prefix-date-key-suffix.jpg they all have the prefix p-20050608- then AAAA is a 4 letter code the suffix is... (7 Replies)
Discussion started by: steve7
7 Replies
Login or Register to Ask a Question