Search code examples
bashshell

Extract part of a filename shell script


In bash I would like to extract part of many filenames and save that output to another file.

The files are formatted as coffee_{SOME NUMBERS I WANT}.freqdist.

#!/bin/sh
for f in $(find . -name 'coffee*.freqdist)

That code will find all the coffee_{SOME NUMBERS I WANT}.freqdist file. Now, how do I make an array containing just {SOME NUMBERS I WANT} and write that to file?

I know that to write to file one would end the line with the following.

  > log.txt

I'm missing the middle part though of how to filter the list of filenames.


Solution

  • You can do it natively in bash as follows:

    filename=coffee_1234.freqdist
    tmp=${filename#*_}
    num=${tmp%.*}
    echo "$num"
    

    This is a pure bash solution. No external commands (like sed) are involved, so this is faster.

    Append these numbers to a file using:

    echo "$num" >> file
    

    (You will need to delete/clear the file before you start your loop.)