From my mailbag:
How do I rename multiple files at a shell prompt under Linux or UNIX operating systems?
Renaming multiple files at a shell prompt is always considered as a black art by many UNIX gurus.
To be frank if you understand regex then it is not a black art anymore. A regular expression is a string that describes or matches a set of strings, according to certain syntax rules (see regex @ wikipedia for more information). Linux (and *BSD) comes with handy utility called rename. As a name suggest 'rename' renames the filenames supplied according to the rule specified (syntax):
rename "regex-rule" files
The rename command discussed here is nothing but a perl script. You can download the script as described below.
Rename command syntax
rename oldname newname *.files
For example rename all *.bak file as *.txt, enter:
$ rename .bak .txt *.bak
Examples: Linux Rename Multiple Files
Convert all mp3 filenames to more readable and usable format. Most of the time MP3 got multiple blank spaces, which may confuse many command line based Linux utilities and mp3 players
$ ls
Output:
06 - Gorillaz - Feel Good Inc.mp3 DDR - Kung- Fu Fighting (bus stop).mp3 AXEL CRAZYFROG.mp3
Remove all blank space with rename command:
$ rename "s/ *//g" *.mp3
$ ls
Output:
06-Gorillaz-FeelGoodInc.mp3 DDR-Kung-FuFighting(busstop).mp3 AXEL-CRAZYFROG.mp3
Linux Shell script to rename files
Before using the rename command I was using the following shell script to rename my mp3s:
#!/bin/bash # To remove blank space if [ $# -eq 0 ]; then echo "Syntax: $(basename $0) file-name [command]" exit 1 fi FILES=$1 CMD=$2 for i in $FILES do # remove all blanks and store them OUT OUT=$(echo $i | sed 's/ *//g') if [ "$CMD" == "" ]; then #just show file echo $OUT else #else execute command such as mv or cp or rm [ "$i" != "$OUT" ] && $($CMD "$i" "$OUT") fi done
To remove .jpg file extension, you write command as follows:
$ rename 's/\.jpg$//' *.jpg
To convert all uppercase filenames to lowercase:
$ rename 'y/A-Z/a-z/' *
Read the man page of rename command for more information:
man rename
Perl Script To Rename File
Download the following script and save as rename in /usr/local/bin/ directory or $HOME/bin and run it as follows:
$ ~/bin/rename 'y/A-Z/a-z/' *
OR
$ /usr/local/bin/rename 'y/A-Z/a-z/' *
Perl script (download):
#!/usr/bin/perl -w # # This script was developed by Robin Barker (Robin.Barker@npl.co.uk), # from Larry Wall's original script eg/rename from the perl source. # # This script is free software; you can redistribute it and/or modify it # under the same terms as Perl itself. # # Larry(?)'s RCS header: # RCSfile: rename,v Revision: 4.1 Date: 92/08/07 17:20:30 # # $RCSfile: rename,v $$Revision: 1.5 $$Date: 1998/12/18 16:16:31 $ # # $Log: rename,v $ # Revision 1.5 1998/12/18 16:16:31 rmb1 # moved to perl/source # changed man documentation to POD # # Revision 1.4 1997/02/27 17:19:26 rmb1 # corrected usage string # # Revision 1.3 1997/02/27 16:39:07 rmb1 # added -v # # Revision 1.2 1997/02/27 16:15:40 rmb1 # *** empty log message *** # # Revision 1.1 1997/02/27 15:48:51 rmb1 # Initial revision # use strict; use Getopt::Long; Getopt::Long::Configure('bundling'); my ($verbose, $no_act, $force, $op); die "Usage: rename [-v] [-n] [-f] perlexpr [filenames]\n" unless GetOptions( 'v|verbose' => \$verbose, 'n|no-act' => \$no_act, 'f|force' => \$force, ) and $op = shift; $verbose++ if $no_act; if (!@ARGV) { print "reading filenames from STDIN\n" if $verbose; @ARGV = <STDIN>; chop(@ARGV); } for (@ARGV) { my $was = $_; eval $op; die $@ if $@; next if $was eq $_; # ignore quietly if (-e $_ and !$force) { warn "$was not renamed: $_ already exists\n"; } elsif ($no_act or rename $was, $_) { print "$was renamed as $_\n" if $verbose; } else { warn "Can't rename $was $_: $!\n"; } } __END__ =head1 NAME rename - renames multiple files =head1 SYNOPSIS B<rename> S<[ B<-v> ]> S<[ B<-n> ]> S<[ B<-f> ]> I<perlexpr> S<[ I<files> ]> =head1 DESCRIPTION C<rename> renames the filenames supplied according to the rule specified as the first argument. The I<perlexpr> argument is a Perl expression which is expected to modify the C<$_> string in Perl for at least some of the filenames specified. If a given filename is not modified by the expression, it will not be renamed. If no filenames are given on the command line, filenames will be read via standard input. For example, to rename all files matching C<*.bak> to strip the extension, you might say rename 's/\.bak$//' *.bak To translate uppercase names to lower, you'd use rename 'y/A-Z/a-z/' * =head1 OPTIONS =over 8 =item B<-v>, B<--verbose> Verbose: print names of files successfully renamed. =item B<-n>, B<--no-act> No Action: show what files would have been renamed. =item B<-f>, B<--force> Force: overwrite existing files. =back =head1 ENVIRONMENT No environment variables are used. =head1 AUTHOR Larry Wall =head1 SEE ALSO mv(1), perl(1) =head1 DIAGNOSTICS If you give an invalid Perl expression you'll get a syntax error. =head1 BUGS The original C<rename> did not check for the existence of target filenames, so had to be used with care. I hope I've fixed that (Robin Barker). =cut
Page last updated at 5:43 AM, February 18, 2012.
- 30 Handy Bash Shell Aliases For Linux / Unix / Mac OS X
- Top 30 Nmap Command Examples For Sys/Network Admins
- 25 PHP Security Best Practices For Sys Admins
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- Linux: 20 Iptables Examples For New SysAdmins
- Top 20 OpenSSH Server Best Security Practices
- Top 20 Nginx WebServer Best Security Practices
- 20 Examples: Make Sure Unix / Linux Configuration Files Are Free From Syntax Errors
- 15 Greatest Open Source Terminal Applications Of 2012

- My 10 UNIX Command Line Mistakes
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- The Novice Guide To Buying A Linux Laptop





![Sending Email With Attachments From Unix / Linux Command [ Shell Prompt ]](http://s0.cyberciti.org/images/rp/1/23.jpg)





{ 106 comments… read them below or add one }
Very Good job dude with that examples.. was helpfull thanks
The ‘rename’ command seems not working for me.. :(
“TRY THIS ONE”
vi change.sh
i
cd $1
j=1
for i in `ls $2`
do
mv $i file{$j}.txt
j=`expr $j + 1`
done
press esc
:wq
chmod +x change.sh
./change.sh ~/file *.txt
WOW….
OH MY GOD ,IT REALLY WORKS
I CAN’T BELIVE THIS….
Perfect!!
You can also use the standard input to find in a folder structure like:
find . -name \*exp_to_find_in_folders\* | rename "s/exp_to_find_for_replacement/exp_to_replace/"leopinzon’s command didn’t worked for me. I used this one:
find -name ‘*exp_to_find_in_folders*’ -exec rename “s/exp_to_find_for_replacement/exp_to_replace/” {} \;
I knew only the crapy mv method, i never thought that linux has a “rename”. :P Thanks! :)
Wow, thank you!
Thanks! Did help a lot!
thanx a ton……its amazing, i though linux dont hav rename……but does.
Thanks…
but how i can rename
foo1.a,foo2.a,…,foo10.a
To
xxx1.a,xxx2.a,….,xxx10.a
???
thanks again
rename “s/foo*/bar/g” *.a
Renames any file with an .a extension that contains “foo” to “bar” in the directory.
rename ‘s/foo/xxx/’ foo*.a
rename ‘s/foo(.*)\.a/xxx$1.avi/’ *.a
the (.*) in the round brackets creates a reference that you can use in the name as $1.
you can have more than one match.
Thanks for all the tips. Can you help mi with this specific example? I have files named:
latinum_20080101_0305-200272-93930-2-25.mp3
latinum_20080101_0310-200279-93934-2-25.mp3
latinum_20080101_0315-200671-94112-2-25.mp3
and I want to rename them to get the following:
latinum_20080101_0305.mp3
latinum_20080101_0310.mp3
latinum_20080101_0315.mp3
How can I do that using rename? (I have several hundred of files like that.)
Hey even I’m working on this kind of renaming. Did the solution provided worked for you?? It didn’t worked out for me. Please let me know how have you done it.
Thanks!
A little late , but here goes:
removes everything after the dash and before the .mp3 (dash included)
How about:
rename ‘s/-*//’ *.mp3
Hopefully that should remove everything after the first hyphen. It’s a guess though, try it on a small sample first ;)
Paul.
This rename ‘s/-*//’ *.mp3 did not work for me… Can you please tell me why it didn’t?? Also, Could you please suggest if there is any approach for this…
it follows perl rules.
What you need to do is to tell it:
rename “s/-.+/\.mp3/” *.mp3
The dash will register as it should. The stop right after the dash signifies a single character. The plus after that means “one or more of the previous thing”
to test it, you don’t need to create a new file, just put -n right after rename like this:
rename -n “s/-.+/\.mp3/” *.mp3
My rename doesn’t seem to support regexes. Fedora 10. How can I get this version?
# rename -V
rename (util-linux-ng 2.14.1)
It should work 2.13 was around for sometime and 2.14 is latest. Can paste your example here..
Example file name: 2001DODGE3500546424-10_12_1.JPG
Desired file name: 2001DODGE3500546424-10.jpg
Command:
rename "s/(_[0-9]+)+\.JPG/.jpg/" *.JPGHenry,
Thank You! I’m on Opensuse 11 and this was driving me crazy… I couldn’t figure out if it was my expression or what was going on. I copied the perl file you linked to and put it in my /bin/ folder and set it to executable permissions.
Then I called
/bin/rename ‘s/(_[0-9a-z]{32})+\.jpg/ .jpg/’ *.jpg
Original File: 321-646-001_01_5f81f62b4b8f448ff50eb0788aa628c7.jpeg
New File: 321-646-001_01.jpg
This is just what I needed. I’m using Google Page Speed Firefox Add-On in combo with Firebug to download Optimized versions of all of my sites images. Google rather annoyingly renames all the files and adds a _ character plus a 32 digit alpha numeric string and then changes the extension to .jpeg for .jpg files. This is just the fix that I was looking for.
Thanks Google and Thanks Henry too.
Cool one… Thanks a lot… Good job… Keep this good work going :)
It seems to be a Debian vs. other distros issue. Debian uses prename, perl rename, which it maps to /usr/bin/rename. I found the source for one version of perl rename online at http://tips.webdesign10.com/files/rename.pl.txt and using that, my regex above works as desired.
Henry, this is an incredibly useful tip, thanks a lot. I was bashing my head against a wall trying to figure out why rename on one machine worked but not on another. I uploaded my ubuntu prename to ~/bin on my centos machine and it “just worked”.
I’m very grateful, could have spent hours trying to figure that out! :-)
how can we rename 100 files in folder
1 fooo1.txt
2 fooo2.txt
3 fooo3.txt
….
to :-
1fooo1.txt
1fooo2.txt
1fooo3.txt
…….
I have a lot of .png file with extension “*.png;1″ but I want to rename all in time to “*.png” how to do that?
Thanks :)
oh yeah,i forgot…
example :
addedit.png;1 filesave.png;1 publish_r.png;1
addusers.png;1 folder_add_f2.png;1 publish_x.png;1
apply_f2.png;1 folder_add.png;1 publish_y.png;1
and want to convert to :
addedit.png filesave.png publish_r.png
addusers.png folder_add_f2.png publish_x.png
apply_f2.png folder_add.png publish_y.png
abd now his one :
AAAAAAB0020090617173034173034AAAA21_-_0001329515.txt.gz
into
AAAAAAB0020090617173034AAAA21_-_0001329515.txt.gz
anyone?
so :
for i in *.txt.gz; do mv $i `echo $i |cut -c1-23,30-55` ; done
how can I rename in specified directory only ?
filename.extension? -> filename.extension
(I have downloading script, but after pasting filename in windows codepage all extensions are finished with “?” and windows see filename garbled..)
how can I rename in specified directory only ?
filename.extension? -> filename.extension
(I have downloading script, but after pasting filename in windows codepage all extensions are finished with �?� and windows see filename garbled..)
hello does somebody knows how to rename the following??
from:
konstantin.bcn
konstantin.bcn0
konstantin.bcn1
konstantin.bcn2
to
georg.bcn
georg.bcn0
georg.bcn1
georg.bcn2
thanks a lot in advance!!
konstantin
j=1
for i in *.txt
do
mv $i file$j.bak
j=`expr $j + 1`
done
rename ‘s/konstantin/georg/’ konstantin.bcn*
Nobody has ever asked this question online it seems…
Problem: Stupid MAC (which I dont have anymore named files with these characters:
“:”
“?”
etc.. in the file names.. I could not find any file renamer that would rename these files in Windows/DOS..
So I tried FENDORA linux and I can rename the manually one by one but i have hundreds…
HELP!!!!
No RENAME or mv command works.. I trired everything i can find online..
I tried specifing the “:” like this “\:” “\x3a” etc.. and nothing.
does anyone know how to strip these retardted OS-illegal characters out of the names.. in one shot.?
I know the ren command in DOS.. but I have no clue it seems in Linux.
and no i don’t have a mac or access to one..
Thanks ahead of time, for your help.
rename ‘s/[^[:print:]]/_/g’ *txt
This will replace all ‘non-printable’ characters in the name with and underscore.
Or if that does not work try escaping the character, e.g:
rename ‘s/\?/_/g;s/\:/_/g’ *.txt
I want to rename files and folder like:
test .txt—–>test.txt
text1 .xls—-> text1.xls
“folder1 ” —->>folder1
“folder2 “—–>>fodler2
Actually there are some files and folders in windows which has blank space at the end of file and folder name.
Basically I want to remove blank space at the end of each file and folder.But there are some different extension files as well.
what if i have a load of files named differently(all .jpg) and i want to rename them into a sequence caleld for example ( test001.jpg test002.jpg and so on )? cheers
thx!
What if I have a bunch of files with no extension and I want to add an extension to them? I tried:
rename * *.mp3rename * .mp3 *
rename * .mp3
but I keep getting a Bareword error :(
strAlan: rename’s probably not the best here, try:
[code]
for file in *; do
mv "$file" "$file".mp3;
done
[/code]
cat OPs_taste_in_music > /dev/null
thanks…, good information
Didn’t worked for me. My file name consists spaces :(
Like,
Report July 2010.xls
In a directory we have two files a1a and a2b.
rename a. a a*
rename ‘s/a./a/’ a*
where . represents wildcard “one character”
The expected result should be aa and ab by stripping the numeric character 1 and 2 from the file name.
Neither is working under GNOME Terminal 2.30.1
Why?
Note spaces are easily done using rename.
For example
rename ” ” “_” *.mp3
rename “s/ *//g” *.mp3 as per the original example of the OP does not work for me.
Why?
gal02_1024-768_tcm251-138878.jpg
gal03_1024-768_tcm251-138882.jpg
gal04_1024-768_tcm251-138886.jpg
gal05_1024-768_tcm251-138890.jpg
gal07_1024-768_tcm251-138898.jpg
How to rename these files as 1.jpg 2.jpg….
Backup files before running above code.
In this command:
i=1
for j in *.jpg; do mv “$j” “$i.jpg” ;(( i++ )); done
How would I get the system to number as _00.jpg, _01.jpg, _02.jpg etc……
instead of _00.jpg, _1.jpg, _2.jpg, etc…..
?
I would like to use the script but use strings.
For example i have:
rename s ‘/text/Text/’ *
this checks all files for have the name text in it and renames it to Text.
If i put it in a script:
#!/bin/bash
#rename script
rename ‘s/text/Text/’ *
it works at the following way: $./rename.sh
As i want to fill in what file to rename i want to use the script as following:
$./rename.sh text Text
can somebody help me out how to use variables.
Thnx!
Adjust this with your script and then try -
#!/bin/bash
match=$1
substitute=$2
rename ‘s/’$match’/'$substitute’/’ *
Then Run-
$./rename.sh text Text
how to rename -file to file?
Ok,
I want to check if a file starts with numbers, i.e.:
101-howdy-832.mp3 -> howdy-832.mp3 ->
10-willem-hello-(radio_edit).mp3 -> willem-hello.mp3
and if it does remove it.
Any tips?
if rename didn’t work for you, then use this:
for file in *; do if [ -f $file ] ; then name=${file%\.*}; mv $file ${name}; fi ; done
This only removes *.mp3 :-(
using this command:
i=1
for j in *.jpg; do mv “$j” “$i.jpg” ;(( i++ )); done
How would I get the system to add a 0 when using single digits? So instead of having the results being
_00.jpg, _1.jpg, _2.jpg, etc…….
it would return
_00.jpg, _01.jpg, _02.jpg, etc…
Im writing my own script to rename my mp3 collection, and i want to remove all junk from the filenames:
Is it possible to check if a filename starts with numeric digits?
Cause now it remove all the first characters till -
But i only want it remove (ONLY!) numeric characters till -
i.e.
09-willem-hello.mp3 -> willem-hello.mp3 (remove 09-)
hesss-hodwy.mp3 -> hesss-hodwy.mp3 (nothing removed)
if filename starts with 09; then do; etc :-)
Another thing is how to remove (*_bpm) where * = a wildcard, i.e 120, 59 etc.
This what i’ve made so far:
#!/bin/bash
# Pattern matching using the # ## % %% parameter substitution operators.
pattern1=*-* # * (wild card) matches everything between.
for file in ls *.mp3; do
if [ -e "$file" ]
then
echo “Number of characters ${#file}”
echo Oldname: ${file}
newname=”$(echo ${file#$pattern1} | sed ‘s/ /_/g’ | tr ‘[A-Z]‘ ‘[a-z]‘ | sed ‘s/_feat_/_ft._/g’ | sed ‘s/_feat._/_ft._/g’| sed ‘s/_-_/-/g’)”
if [ "$file" != "$newname" ] ; then
echo Newname: $newname
mv “$file” “$newname”
echo —————————————-
else echo Nothing to do!
fi
#echo ‘${var1#$pattern2} =’ “${var1#$pattern2}” # d12345abc6789
# Shortest possible match, strips out first 3 characters abcd12345abc6789
# ^^^^^ |-|
#echo ‘${var1##$pattern1} =’ “${var1##$pattern1}” # 6789
# Longest possible match, strips out first 12 characters abcd12345abc6789
# ^^^^^ |———-|
fi
done
exit 0
I also want include this:
match=feat versus (radio)
substitute=ft. vs. (radio_edit)
newname=”$(echo ${file#$pattern1} | sed ‘s/’$match’/’$substitute’/g’)”
willem versus wca feat wasd – hello world (radio)
willem_vs._wca_ft.wasd-hello_world-(radio_edit)
So i can as much items to change as i want.
Hope someone can help me out! :-)
Im sick and tired of using windows based tools in wine to do this, while bash is even stronger and more fun to learn ;-)
wow this is a popular post for good reason. I wonder if its still active.
Can this descend in to directories? I’d like to rename some image files with the following file and directory structure.
01/01-0012.jpg
01/01-0342.jpg
02/02-3495.jpg
…..
98/34-0424.jpg
so i would like to rename them to
01/01-001.jpg
01/01-034.jpg
02/02-349.jpg
…..
98/34-042.jpg
So i really just want to cut the last number before the .jpg but the files literally span 99 directories, so don’t want to do it for each one. Any ideas?
hi, I need to add a letter into file name in many files but not using automator, is it possible?
for example: I have files like 1.png, fs.png, ghasd.png and need to add “-hd” so the name will be 1-hd.png fs-hd.png, and original files will be not deleted, how to do that? :) thanx!
you can do the following:
# rename .png -hd.png *.png
How about that? :)
Let me know if you need any further help
thank you, I will try :)
Excellent write up!!
Thank you sir…
Been browsing the internet for a while for this, and just came across this neat little command, instead of people writing different scripts and such.. AWESOME!!
$ rename .bak .txt *.bak – command worked for me to rename all *.bak to *.txt
Many Thanks
Very Helpful. Thank You :)
On OSX I didn’t have rename handy, so I came up with this to change extensions of a bunch of files:
find . -name “*.ext1″ | sed s/ext1// | xargs -I % mv %.ext1 %.ext2
I imagine it could be done in a more simple fashion, but it works well if you need to swap something at the end or the beginning of the filenames.
Hi, I am trying to rename some files with .ext to ones without .ext in RedHat 5
For eg: files like “ocean_11h20110906.txt” have to renamed as “ocean_11h20110906″
tried almost all the commands mentioned above. i have several such files to be renamed without extensions. Can anyone help me out. Plz treat this as urgent.
You need to use rename.pl. See comment above: http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html#comment-148758
This is a very usefule and informative thread. However, i haven’t quite got exactly how how I would do my renaming. I need to rename daily files from format
XX_AA1234_201109.txt to AA1234_201109_XX.ext. Note that I need to change both position of a string and the extension itself. Any suggestions would be highly appreciated!
@Gary
rename XX_ “” *.txt; rename .txt _XX.ext *.txt
@VIVEK
I think your example about the AXEL-CRAZYFROG.mp3 file is not correct. The – will not be added with your code. I think you forgot to include the hypen in the original name.
@paxpacis-Appreciate your input. however, I don’t think I understand your solution. Here are some example files:
AF_DD2795_199905_20110824.txt should be renamed to DD2795_199905_20110824_AF.raw
AF_DD2795_199905_20110924.txt should be renamed to DD2795_199905_20110924_AF.raw
How do I automate this?
Hey,
Thanks for the tip, but the rename command didnt work on my Fedora 15 x64. I didnt get any error message, but the spaces didnt go ! As one suggested above, does it work only on debian systems ? I checked man rename, there is no info on usage. Just has description of the -v switch. I am using “rename (util-linux 2.19.1)”
Thanks !
You need to use rename.pl. See comment above: http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html#comment-148758
i=0; for image in *.jpg; do mv “$image” “Name with spaces `printf “%.3d” $i`.jpg”; ((i++)); done
Renames:
asdlkjas.jpg
reojsd.jpg
asfkjdf.jpg
to
Name with spaces 000.jpg
Name with spaces 001.jpg
Name with spaces 002.jpg
“Figure 03-01-02: GradeBook class declaration with one method: Createing a Gradebook object an calling its displayMessage method.avi”
How can we bulk rename files like this? These are located in subfolders like
“Blaa: blaaaaah: bla bla: bla” etc.
None of the posted above methods not working. :(
I need replace all these stupid “:”.
Well god points, but how about this :
rename muiltiple files in subfolders… (.nfo to movie.nfo )
Thanks for the info.
rename doesnt seem to be recursive
For recursive do this, to rename .html to .htm.bak. Replace . with your dir name if you want to replace files not in current directory
find . -name “*.html” | xargs rename .html .htm.bak
my trials to rename files from pic_1.jpg pic_2.jpg … to pic_1500.jpg 1501.jpg … failed :-(
Hope to get some help
rename -n ‘s/pic_(\d+)/”pic_” . ( $1 + 1500 )/e’ *.jpg
Thanks for trying to help me. If I do:
rename -n ‘s/pic_(\d+)/”pic_” . ( $1 + 1500 )/e’ *.jpg
then I get:
Unrecognized character \xE2 in column 5 at (eval 1) line 1.
:-(
It works for me, what linux are you using and which version of util-linux are you using? Mine is:
user@host > lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 10.04.4 LTS
Release: 10.04
Codename: lucid
user@host > dpkg -l | grep util-linux
util-linux 2.17.2-0ubuntu1.10.04.2
The other thing to make sure is that the quotes are exactly as I used, single quotes (‘) to enclose the whole command and double-quotes (“) to enclose the pic_ part.
Hi Sakiwi,
it’s working now :-) Indeed the double-quotes were the problem. I didn’t know that there are different kinds of double-quotes existing in the world.
”pic_”
“pic_”
Many Thanks and best regards, zaphod !!!
Glad it is working for you now, and glad I could help.
Regards
SaKiwi
How to add a prefix to original file names..
eg: moon.jpg –> Pic_moon.jpg
flowers.jpg –> Pic_flowers.jpg
..
rename ‘s/(.*)\.jpg/Pic_$1\.jpg/’ *jpg
Or if you files don’t have spaces in the names you could also do:
for files in *jpg; do mv “$files” “Pic_$files”; done
For FreeBSD, the syntax is slightly different:
will replace oldtext with newtext in all files of type ext
will replace spaces with underscores
s/in all files/in the names of all files/g
doh
Copy one source file to different file name.
#!/bin/bash
FOLDER_PATTERN_LIST=folder_pattern_list
echo “$(cat $FOLDER_PATTERN_LIST)” | while read line; do
LISTLINE=”${line}”
echo “cp test.pdf $LISTLINE”
done
Output:
cp test.pdf File1
cp test.pdf File2
cp test.pdf File3
Hi there. Would love some help on this:
img.jpg.1
img.jpg.2
img.jpg.3
to become…
img1.jpg
img2.jpg
img3.jpg
Thank you for any suggestions!
@Michael
@Michael
rename ‘s/(.*)\.(.*)\.(\d+)/$1.$3.$2/’ *.[0-9]
@Ethan
I did something similar. After I converted my daugther’s shows for her touchpad the old avi extension where still in the filename, which I had/wanted to remove.
The touchpad doesn’t have `rename` so this is what I did…
#!/bin/sh
find . -name ‘*.mp4′ >> /tmp/$$
while read line; do
foo=`echo $line | sed s/.avi//g`
mv $line $foo
done < /tmp/$$
rm /tmp/$$
Anyone remember about brace expansion?
mv file.{foo,bar}
will expand to:
mv file.foo file.bar
Or in a loop:
# removes the foo extension before the expansion:
for file in *.foo; do mv ${file%foo}.{foo,bar}; done
A lot less involved than some of the examples here.
The date of my phone was reset to 2009 some day after removing the battery and I just set the time. So after some weeks I uploaded my fotos to my PC and got all the pictures with the wrong date as a file name. Here is the script that corrected that issue at once:
Please make a backup before you use it. This comes without any warranties of course.
for filename in `ls 2009*` ; do mv $filename `date --date="${filename:0:10}+1301 days" +"%Y-%m-%d"`${filename:10}; donehey if I want to rename a folder of files which have names like:
artist – album – 01 song
artist – album – 02 song
and I want to rename them to
01 – song
02 – song
how do I do this? Have been struggling to adjust the examples given here
Kind regards
rename -v ‘s/.* – .* – (\d\d) (.*)/$1 – $2/’
The brackets tell rename that those are portions you want to keep/reuse in the replace portion and are referenced by $1, $2, $3 etc… So in your case it keeps the 2 digits “(\d\d)” as $1 and then a space and then everything else “(.*)”.
It will then in the second part of the regex rename the file as \d\d – .*
i.e. 01 – song, 02 – song, 03 – song etc…
Hello ,
Can anyone assist me with following replacement
avatarXXX_1.gif => photo-XXX.gif
I tried
rename -n ‘s/avatar(\d+)_1\.gif/photo-$1\.gif’ *gif
But it didn’t work
Try:
for i in *; do mv $i photo-${i#avatar}; done
mert – This works for me:
rename -n ‘s/avatar(\d+)_.*\.gif/photo-$1\.gif/’ *.gif
–> avatar123_1.gif renamed as photo-123.gif
–> avatar234_5.gif renamed as photo-234.gif
–> avatar4565_125.gif renamed as photo-4565.gif
It’s strange but it doesn’t function at all for me. Now time to debug what is wrong with it.
[root@test tet]# rename -n ‘s/avatar(\d+)_.*\.gif/photo-$1\.gif/’ *.gif
[root@test tet]# ls
avatar605323_2.gif avatar605379_1.gif avatar605425_2.gif avatar605443_1.gif
avatar605336_1.gif avatar605386_2.gif avatar605427_1.gif
[root@test tet]# rename ‘s/avatar(\d+)_.*\.gif/photo-$1\.gif/’ *.gif
[root@test tet]# ls
avatar605323_2.gif avatar605379_1.gif avatar605425_2.gif avatar605443_1.gif
avatar605336_1.gif avatar605386_2.gif avatar605427_1.gif
[root@test tet]# rename –help
call: rename from to files…
mert – are you using the “util-linux” rename utility? I am using ubuntu, and this is the details of my “rename” utility:
clive@dogmatix > which rename
/usr/bin/rename
clive@dogmatix > apt-file search /usr/bin/rename
ladr4-apps: /usr/bin/renamer
util-linux: /usr/bin/rename.ul
clive@dogmatix > dpkg -l | grep util-linux
ii util-linux 2.20.1-1ubuntu3 Miscellaneous system utilities
So if you are using an ubuntu derivate system then install the package:
clive@dogmatix > sudo apt-get install util-linux
Hello Adam ,
It functions up to a level
but it converts the file as photo-XXX_1.gif
Is there any way to get rid of _1 ?
I want to rename file from model1 model2….model 50 as model100 model102…model150…I tried codes similar to above but didnt work…
dear owner this site i’m thai people can write english a bit
i have muti files start with number 3 digit and 1 char is underscore
058_เธ•เธฒเธฃเธฒเธเธชเธญเธเธ….ปปป.doc
145_เธเธฑเธเธ—เธถเธเธเนเธญเธเธงเธฒเธก manage1.doc
146_เธเธฑเธเธเนเธญเธเธงเธฒเธก.docx
147_เธเธฑเธเธ—เธถเธเธเนเฒเธก manage5.pdf
149_เธเธฑเธเธเธเนเธญธงเธฒเธก manage2.ppt
i want to follow this
058_view.doc
145_view.doc
146_view.docx
147_view.pdf
149_view.ppt
Help me please.