Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

I have a number of tiff files named:

sw.001.tif
sw.002.tif
...

and I want to remove the .tif at the end of each of the files. How can I use the rename command to do this?

share|improve this question
2  
Bear in mind that NO linux or unix filesystem uses Windows or VMS-style "extensions" - it is only by convention that a suffix of the file name is ".tif" or ".c" or ".o" or ".so" or whatever. –  Bruce Ediger Mar 19 '12 at 23:07
    
That's fine... I'm importing files from windows to linux :) –  Paul Mar 19 '12 at 23:14
    
Technically speaking Windows doesn't use file extensions either, it's just that Windows 95's file manager kept using the last characters of the filename to determine file type after breaking out of the MS-DOS naming scheme and the convention has since remained. –  RAKK Feb 20 at 19:04

4 Answers 4

up vote 13 down vote accepted

perl's rename (as typically found on Debian where it's also called prename), or this derivative (rename package on Debian):

rename 's/\.tif$//' *.tif

util-linux rename (as typically found on Red Hat, rename.ul on Debian):

rename -- .tif '' *.tif

(note that that one would rename blah.tiffany.tif to blahfany.tif)

share|improve this answer
2  
I believe the "Debian" rename is by Larry Wall (comes with Perl?) and "Red Hat" one is from util-linux (rename.ul in Debian IIRC). –  XTL Mar 20 '12 at 14:19
    
@XTL: True. I just call them that because they're the "rename" programs found in Debian or Red Hat derivatives. –  Ignacio Vazquez-Abrams Mar 20 '12 at 14:39
    
Thanks so much! I never realized that there were different versions of 'rename'. I assume there are other subtle differences between the commands in debian & redhat. I'll have to lookup some of their differences. –  Paul Mar 20 '12 at 14:45

For a non-rename, you might do:

$ for i in *.tif; do mv -i $i `basename $i .tif`; done

(-i to warn against replacing a file)

share|improve this answer
8  
Safer faster version: for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done –  jw013 Mar 20 '12 at 14:13

If you use IBM AIX you won't have a rename command, so in order to batch remove file extensions you'll have to use plain vanilla System V UNIX commands:

for file in *.tif; do
   mv $file `echo $file | sed 's/.tif$//';
done;
share|improve this answer
rename -- .oldext .newext *.oldext

This substitutes the old extension with the new one. To simply remove the extension you can explicitly pass in an empty string as an argument.

rename -- .gz.tmp  '' *.gz.tmp

With the above command all files with .gz.tmp extension in the current folder will be renamed to filename.gz.

Refer to the article : Linux: remove file extensions for multiple files for details.

share|improve this answer
    
That assumes the util-linux implementation of rename which is incompatible with (and much more limited than) the traditional rename command from perl. –  Stéphane Chazelas May 27 at 9:49
    
Also note that it replaces the first occurrence of .oldext within the file name, not necessarily the extension (foo.oldextasy.oldext would be renamed to footasy.oldext). –  Stéphane Chazelas May 27 at 9:50

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.