Home > Enterprise >  bash: rename files dropping a specific delimited part of the filename
bash: rename files dropping a specific delimited part of the filename

Time:11-12

I've been trying to find an efficient way to rename lots of files, by removing a specific component of the filename, in bash shell in linux. Filenames are like:

DATA_X3.A2022086.40e50s.231.2022087023101.csv

I want to remove the 2nd to last element entirely, resulting in:

DATA_X3.A2022086.40e50s.231.csv

I've seen suggestions to use perl-rename, that might handle this (I'm not clear), but this system does not have perl-rename available. (Has GNU bash 4.2, and rename from util-linux 2.23)

CodePudding user response:

I like extended globbing and parameter parsing for things like this.

$: shopt -s extglob
$: n=DATA_X3.A2022086.40e50s.231.2022087023101.csv
$: echo ${n/. ([0-9]).csv/.csv}
DATA_X3.A2022086.40e50s.231.csv

So ...

for f in *.csv; do mv "$f" "${f/. ([0-9]).csv/.csv}"; done

This assumes all the files in the local directory, and no other CSV files with similar formatting you don't want to rename, etc.

  • Related