I would like to modify the name of several files in a folder. The name are in this format:
Name_name_name_name_XXXX.fa
I would like:
XXXX_Name_name_name_name.fa
I tired using
for f in *.fa; do mv "${f/.fa/Name_name_name_name.fa}";done
output Name_name_name_name_XXXX_Name_name_name_name.fa
and then
for f in *.fa; do mv "${f/Name_name_name_name_//}"; done
to remove the 4 name_name. but it didnt work.
Any idea how to do it?
You can use sed
:
for f in *.fa; do
mv "$f" $(sed -E 's/^(.+)_([^.]+)\./\2_\1./' <<< "$f")
done
sed
command uses 2 capture groups. 1st group contains string before last underscore and 2nd group contains XXXX
part (part between last _` and dot).