a ) solução find + nome do produto (Perl rename
):
find . -type f -name "*-XYZ12-XYZ12-*.gz" -exec prename 's/(-XYZ12)()+/$1/g' {} \;
b ) abordagem bash + encontrar + sed se prename
não for suportado:
for f in $(find . -type f -name "*-XYZ12-XYZ12-*.gz"); do
p="${f%/*}" # full path without basename (parent folders)
fn="${f##*/}" # current filename (basename)
new_fn=$(sed 's/\(-XYZ12\)\+/-XVZ12/' <<<"$fn") # new file name
mv "$f" "$p/$new_fn"
done
c ) Além disso, você é capaz de evitar o uso de sed
na abordagem bash acima usando apenas a substituição da variável bash :
shopt -s extglob
for f in $(find . -type f -name "*-XYZ12-XYZ12-*.gz"); do
p="${f%/*}" # full path without basename (parent folders)
fn="${f##*/}" # current filename (basename)
new_fn="${fn/+(-XYZ12)/-XVZ12}" # new file name
mv "$f" "$p/$new_fn"
done