I have a set of files, all of them nnn.MP4.mov
. How could I rename them so that it is just nnn.mov
?

- 18,845
- 10
- 77
- 85

- 763
- 1
- 5
- 4
-
1Install muCommander. It has the Total Commander style batch renamer. Why to waste time on that crap 100 chars of mindblowing batch command? – Nakilon Aug 17 '13 at 22:34
-
@Nakilon because learning the command line has bigger return on investment – Julien__ Apr 25 '17 at 13:14
10 Answers
First, do a dry run (will not actually rename any files) with the following:
for file in *.mov
do
echo mv "$file" "${file/MP4./}"
done
If it all looks fine, remove the echo
from the third line to actually rename the files.

- 45,245
- 23
- 243
- 245

- 25,121
- 5
- 44
- 52
-
19Could not figure out why this was not working... there was output and it looked like it was, but it was not actually doing anything. Well I finally figured out that you need to remove the ECHO statement to actually get it to do something (on OSX 10.7 anyways). So if you keep the echo statement then you can test it to see if the renaming is going to work like you want, then remove the echo to get it to work. So equivalent from Windows of ren *-hd.png *.png is: for file in *.png do mv "$file" "${file/-hd/}" done – jsherk Jul 12 '12 at 01:10
-
4to run the script you need to: 1. save it in `rename.sh` file; 2. make it executable `chmod 755 rename.sh`; 3. launch it from the current folder where you have files to rename and shell script `./rename.sh`; 4. if result is good remove `echo` from the script and launch it again. I needed to add extension to group of files. so my action in the scrip was like this: `mv "$file" "${file}.jpeg"` – Anatolii Pazhyn Sep 10 '16 at 08:17
-
This is a script and needs to be created as a file and then run right? Clues? – wide_eyed_pupil May 21 '18 at 06:10
-
Running as single line cmd like this: `for file in *.mov; do echo mv "$file" "${file/MP4./}"; done`, the `;` does the trick. – Evi Song Apr 29 '21 at 14:58
-
4For other use cases, note the general format of the command: `echo mv "$file" "${file/[replace_this]/[with_this]}"` – HLeb Jul 20 '21 at 15:08
I just successfully used Automator (first time I've bothered), and it works really well. I saved the automation as a Service. It took about 10 seconds to make something easily reusable:
- Open Automator.
- As type of document, choose "Service".
- Change Service receives selected "Text" to "files and folders".
- Consider changing "any application" to just Finder.
- From the sidebar, select "Files & Folders" (under Library) and from the listed actions, in the center column, drag "Rename Finder items" to the right side and drop it within "Drag actions or files here to build your workflow."
- Change the action you just added from "Add Date or Time" to "Make Sequential".
- Click "Options" at the bottom of the action and check the option "Show this action when the workflow runs".
- Hit "CMD+S" to save the service as something like "Replace Text"..
- Done!
Now you can right-click any selection in Finder, go to the Service menu and select "Replace Text", fill in how you want the text changed or replaced - and click "Continue" to apply configured changes.

- 2,472
- 1
- 23
- 25
-
-
Great answer, even if it is not what the OP asked for. Any excuse for me to learn Automator is welcomed :-) BTW, it does not work on a folder, but it does work on multiply selected files. – phatmann Aug 12 '14 at 22:43
-
-
Don't you mean change from "Add Time and Date" to "Replace Text" ? – wide_eyed_pupil May 21 '18 at 06:08
-
What wildcards are accepted in the find and replace fields? Is it Grep compatible? – wide_eyed_pupil May 21 '18 at 06:09
-
I couldn't understand why my Service name changes weren't being reflected in the Contextual Menu, until I realised there's a default `Rename Files…` command in the main contextual menu, mine were inside the Services sub-menu! – wide_eyed_pupil May 21 '18 at 06:17
To test print the operation:
for file in *.MP4.mov; do j=`echo $file | cut -d . -f 1`;j=$j".mov";echo mv \"$file\" \"$j\"; done
To make it work:
for file in *.MP4.mov; do j=`echo $file | cut -d . -f 1`;j=$j".mov";mv "$file" "$j"; done

- 489
- 4
- 6
On mac OSX you can install the rename
command via Homebrew: brew install rename
Then you can rename using find/replace from that folder on the command line:
rename 's/\.MP4\././' *
You also can see more options using man rename
.

- 26,610
- 23
- 107
- 172
for n in *.MP4.mov
do
mv $n $(echo $n | sed -e 's/.MP4//')
done
This will work even on really old shells that don't have parameter substitution, and it's a tad more readable to my eyes at least.

- 1,864
- 16
- 23
-
I have applied this to files that use `_MG_` in their name that I needed to change to `-IMG_` perfectly by modifying with a `*` and a `*` in the middle. Worked a charm. Thank you! – Danijel-James W Oct 01 '14 at 01:53
OS X has a Rename Files…
contextual menu item which is invoked when you select two or more files in Finder. Provides the same function as the Automator answer up above. Though Automator provides you with the tools to go further if you wish.
(I know OP asked for Terminal but 33 others like Automator response)

- 3,153
- 7
- 24
- 35
for i in `ls *png`;do echo mv $i "${i%%.*}"@xx."${i##*.}";done

- 70,219
- 68
- 205
- 290

- 1,388
- 10
- 15
vimv lets you rename multiple files using Vim's text editing capabilities.
Entering vimv opens a Vim window which lists down all files and you can do pattern matching, visual select, etc to edit the names. After you exit Vim, the files will be renamed.
[Disclaimer: I'm the author of the tool]

- 9,168
- 9
- 37
- 38
ls -1 *.MP4.mov | while read f; do mv -i "$f" "$(basename \"$f\" .MP4.mov)"; done
Edit: completly rewritten.

- 793
- 4
- 13
for i in *;
do j=`echo $i | cut -d . -f 1`;
j=$j".mov";
mv $i $j;
done
this will cut everything before the first dot and appends .mov
but if some files are e.g. hi.2.mov and hi.1.mov one will be overwritten, so use it carefully ^^

- 3,857
- 3
- 19
- 28