[BASH] Getting a filename its extension


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting [BASH] Getting a filename its extension
# 1  
Old 05-06-2015
[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?

Code:
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 dots as string seperators
do	out="$chance"
done
if [ "$out" = "$FN" ]
then	echo ""
else 	echo "${out%\ /}" 	# Remove any tailing or single space
fi

Thank you
# 2  
Old 05-06-2015
Code:
ext=${1##*.}
if [ "$ext" = "$1" ]; then
  echo ""
else
  echo "$ext"
fi

This User Gave Thanks to neutronscott For This Post:
# 3  
Old 05-06-2015
Oh my...
In almost every script i have: XY=${0##*/} to get the basename... Smilie

Sometimes the solution is in front of your eyes, one just doesnt see (reckognize) it (as such).
# 4  
Old 05-06-2015
Another approach:
Code:
IFS=. read first last <<< "$1"
echo "${last##*.}"

This User Gave Thanks to Scrutinizer For This Post:
# 5  
Old 05-06-2015
Quote:
Originally Posted by Scrutinizer
Another approach:
Code:
IFS=. read fn ext <<< "$FN"
echo "${ext##*.}"

The IFS doesnt handle filenames with multiple dots (the way you used it).
But the same, thats NOT regex - is it?, substitution as neutro does, making the previous read command pointless, or not?

EDIT2:
I thought similar, but failed at the 2nd step, which was 'Neutro's solution.

Last edited by sea; 05-06-2015 at 05:44 PM..
# 6  
Old 05-06-2015
Hi Sea, the previous read command is not useless, it is there to cater for the possibilty that a filename has no extension. It splits the filename into a first part before the first dot and (into variable first) and a last part (into variable last) that contains everything after the first dot.

If the file contains no extension, then the variablelast will be empty and thus echo "${last##*.}" will produce an empty string ("").
If there is an extension then echo "${last##*.}" will produce the part after the last dot..

It is indeed not REGEX; it is parameter expansion...

Last edited by Scrutinizer; 05-06-2015 at 11:58 PM..
This User Gave Thanks to Scrutinizer For This Post:
# 7  
Old 05-07-2015
Using a bash array:
Code:
FN=ABC.CDE.DEF
IFS=. read -a PARTS <<< "$FN"
echo ${#PARTS[@]} ${PARTS[-1]}
3 DEF

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. 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

2. 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

3. 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

4. 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

5. Shell Programming and Scripting

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... (5 Replies)
Discussion started by: daflore
5 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