iamthearm
iamthearm

Reputation: 503

Search for matching filename pattern with a bash script

First off, I apologize if this is a noob question - I am quite new to bash scripting.

I have a directory containing many types of files and folders. I need to perform a set of actions upon all files matching a certain pattern. This is the pattern: prefix_suffix.ext. The _suffix.ext is the exact same for all the target files and only the prefix portion is variable.

Is it possible (and if so, how?) to, within bash, loop over all filenames matching the pattern and have one variable for filename and one for prefix within the loop. I'd like to avoid external tools such as sed.

Any help would be greatly appreciated! Thank you!

Upvotes: 3

Views: 282

Answers (1)

Petr Skocik
Petr Skocik

Reputation: 60145

for filename in *_suffix.ext; do 
    prefix="${filename%_suffix.ext}"
    #do your thing here
done

This uses the POSIX suffix stripping feature (see man dash and type /suffix<enter> to search for suffix):

${parameter%word} Remove Smallest Suffix Pattern. The word is expanded to produce a pattern. The parameter expansion then results in parameter, with the smallest portion of the suffix matched by the pattern deleted.

(%% would strip the longest matching suffix, but since we're using a literal suffix here instead of a glob pattern, the two are the same in this case).

Runnable example:

for filename in pre1_suffix.ext pre2_suffix.ext; do     
       prefix="${filename%_suffix.ext}"
       echo "$prefix"
done

will print

pre1
pre2

Upvotes: 3

Related Questions