queremos substituir a extensão do arquivo de script
então fizemos o seguinte:
new_name=` echo run_fix.bash | sed 's/[.].*$//' `
new_file_extension=".in_hold.txt"
new_name=$new_name$new_file_extension
echo $new_name
run_fix.in_hold.txt
mas sinto que minha abordagem não é tão elegante
note - porque a extensão de script pode ser bash ou perl ou python e também a extensão de destino pode ser qualquer coisa depois de "." queremos substituição global
Estou usando redhat 7.2
Isso removeria o sufixo
.bash
do nome do arquivo do valor de$old_name
e adicionaria.in_hold.txt
ao resultado disso. A coisa toda seria atribuída à variávelnew_name
.A expansão
${variable%pattern}
para remover a string de sufixo mais curta que corresponde ao padrãopattern
do valor de$variable
é uma expansão de parâmetro padrão .Para substituir qualquer sufixo de nome de arquivo (ou seja, qualquer coisa após o último ponto no nome do arquivo):
O
.*
padrão corresponderia ao último ponto e qualquer coisa depois dele (isso seria removido). Se você tivesse usado%%
em vez de%
, a substring mais longa que correspondesse ao padrão teria sido removida (neste caso, você teria removido tudo após o primeiro ponto na string). Se a string não contiver nenhum ponto, ela permanecerá inalterada.Tente o
rename
comando, por Larry Wall. Não instalado por padrão em todos os sistemas, e alguns possuem um comando diferente com este nome. Está definitivamente disponível para sistemas baseados em Debian.rename
ésed
para nomes de arquivos.