removing the filename extension


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting removing the filename extension
# 1  
Old 03-03-2011
removing the filename extension

Is there an easy way to strip off a filename's extension?

For example, here's a filename:

blahblahblah.thisisok.thisisnotok

I want to get rid of .thisisnotok from the filename, so that what's left is

blahblahblah.thisisok

Thanks. I have a directory full of filenames that need to be manipulated in this way.
# 2  
Old 03-03-2011
What Operating System and version do you have?
What Shell do you use?

Are the filename extensions random?
Do all files have an extension which is to be removed?
# 3  
Old 03-03-2011
ubuntu 10.10 maverick meerkat

bash shell

all of the files have the same extension that needs to be removed

---------- Post updated at 11:04 AM ---------- Previous update was at 11:02 AM ----------

sorry, and the filenames have spaces in them
# 4  
Old 03-03-2011
Hope this helps point you in the right direction:
Code:
for x in *;do mv $x $(echo ${x%*.*});done

If you want to test it first, remove the 'mv' command:
Code:
for x in *;do echo ${x%*.*};done

Should list the files with the extension removed. If not, then previous command my require some tweaking. Google "bash shell scripting parameter substitution" for additional help. Good luck.

Last edited by Franklin52; 03-03-2011 at 05:49 PM.. Reason: Please use code tags, thank you
# 5  
Old 03-03-2011
Posix compatible shells ksh93, bash, ..

Code:
filename="some part.some some.filetype"
notlast=${filename%.*}
last=${filename##*.}
first=${filename%%.*}
notfirst=${filename#*.}

# 6  
Old 03-03-2011
Quote:
Originally Posted by in2nix4life
for x in *;do mv $x $(echo ${x%*.*});done
There's no need for the echo command substitution and the first asterisk in your parameter substitution is meaningless since it's a shortest match (% instead of %%). Also, the filenames in question have spaces (perhaps that info was added after you had read the post), so the expansions need to be double quoted to protect them from field splitting.

A slightly simpler version of your approach:
Code:
for x in *; do
    mv "$x" "${x%.*}"
done

---------- Post updated at 04:43 PM ---------- Previous update was at 04:40 PM ----------

Quote:
Originally Posted by daflore
Is there an easy way to strip off a filename's extension?
...<snip>...
Thanks. I have a directory full of filenames that need to be manipulated in this way.
If it's possible that striping the file extension from file1 can match an existing file, file2, and if you don't want file2 clobbered, you'll want to test for the existence of file2 before doing the mv.

Regards,
Alister
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

[BASH] Getting a filename its extension

Heyas As i often have decide things upon a filename its extension, i thought i'd write a script: Just wondering if there would be a more efficent way? out="" FN=$( echo "$1" | sed s," ","",g) # Remove any spaces and make it a single string for chance in $(echo "$FN"|sed s,"\."," ",g) # Use... (7 Replies)
Discussion started by: sea
7 Replies

2. Shell Programming and Scripting

Get latest filename without extension

I need to write a shell script to display the output of ls command like this ls -ltr *txt I get this -rw-r----- 1 oracle dba 51912704 Dec 11 10:27 /usr/local/sam/test12112012101247AM.txt -rw-r--r-- 1 oracle dba 7 Dec 11 11:58 /usr/local/sam/test.txt but I just need the latest... (7 Replies)
Discussion started by: sumang24
7 Replies

3. UNIX for Dummies Questions & Answers

BASH - Removing the very last character(s) extension of a filename

Hello. I would like to know how to do this in bash script : A_WORD="ABCD_EFGH.0.100.40.123" NEW_WORD=remove_last_ext("A_WORD") NEW_WORD --> ABCD_EFGH.0.100.40 A_WORD="ABCD_EFGH.0.50.3" NEW_WORD=remove_last_ext("A_WORD") NEW_WORD --> ABCD_EFGH.0.50 A_WORD="ABCD_EFGH.3.100.50." ... (2 Replies)
Discussion started by: jcdole
2 Replies

4. Shell Programming and Scripting

Rename all files (filename with spaces) to different extension

Hi, I have files with filenames as below. SGM Daily Sales Email-en-us-05312012.xlwa I want to rename it in .xls. I am writing a script to change this, as there can be multiple files in subfolders. I have the following script. #!/bin/ksh for oldfile in $(find... (1 Reply)
Discussion started by: mac4rfree
1 Replies

5. Shell Programming and Scripting

Script to add extension to filename

Hi all, I have a folder with a bunch of files in them, and I would like to add an extension (.mp3)to all these filenames. The folder has only files that I'd like .mp3 added to. It looks something like this: Intput: File1 File2 File3Output: File1.mp3 File2.mp3 File3.mp3Thanks in... (2 Replies)
Discussion started by: repiv
2 Replies

6. Shell Programming and Scripting

Getting filename with entire path without extension

Hi Experts, need one help.. m writing a shell script for which i need the entire path of the file but without its extension. running the below script gives error at the statement DIR = `dirname $FILE` --command not found. #!/bin/bash jar xvf *jar for FILE in `find . -name "*.class"` ... (3 Replies)
Discussion started by: amicableperson
3 Replies

7. Shell Programming and Scripting

cut filename extension

I need a small script (sh) to remove in a variable the filename extension. Example: f = "testfile.txt" and I need a $a with "testfile". Some one a idea? (4 Replies)
Discussion started by: Essbaumer
4 Replies

8. UNIX for Dummies Questions & Answers

script takes the whole filename instead of just extension

I am running my script from "/abc/" this path and it has no ".csv files" but has a ".txt" files namely temp1.txt My script goes as below, wherein it is suppose to find files with *.txt extension and *.csv extension in another path namely "/abc/xyz/": #!/bin/ksh PATH1="/abc/xyz/" value="*.csv... (1 Reply)
Discussion started by: wolverine999
1 Replies

9. Shell Programming and Scripting

changing filename extension

Hi All, i need to change the filename extension. For simplicity, we can assume that the extension after '.' is 3 characters only... but the filenames can vary. eg. changing from abc.doc to abc.dxs can i have a oneline command to achieve this (3 Replies)
Discussion started by: Hiso
3 Replies

10. Shell Programming and Scripting

separating filename and extension

Hi (warning: newbie question), I am writing a script to run a series of tests on a program, which involves a line: for file in `ls test_suite/*.args` but later I want to send the output to file.out. But I need to separate the filename and extension somehow...Also $file contains... (2 Replies)
Discussion started by: lucaspewkas
2 Replies
Login or Register to Ask a Question