shell expandindo referências de comando de renomeação

0

Quando estou usando o padrão de grupo correspondido no comando rename e uso suas referências anteriores na peça de substituição e também quero ter a expansão de substituição de comandos no meu comando rename e usar aspas duplas para expandir, mas shell considerando também referências anteriores como parâmetros e que causam renomeação de problemas. Como posso evitar isso?

rename "s:(.*)$(date +"%Y%m%d"):$1$(date -d "+1day" +"%Y%m%d"):" *

Também tentei separar parte da expansão de substituição de comandos, mas não tive sorte, apenas imprime aspas extras em torno de $(date -d "+1day" +"%Y%m%d") .

rename 's:(.*)'"$(date +"%Y%m%d")"':$1'"'"$(date -d "+1day" +"%Y%m%d")"'"':' *
    
por αғsнιη 19.09.2017 / 20:35

2 respostas

2

Apenas escape em $ em $1 :

rename "s:(.*)$(date +"%Y%m%d"):\$(date -d "+1day" +"%Y%m%d"):" *

Mas você pode simplificar seu padrão assim:

rename "s#$(date +%Y%m%d)#$(date -d +1day +%Y%m%d)#" *

(isto assume que # não aparece na expansão de date ).

    
por 19.09.2017 / 20:50
1

Supondo que esta é a versão Perl de rename , uma solução é executar a data com o Perl.

rename 'use Time::Piece;use Time::Seconds;$t=localtime;$n=$t+ONE_DAY;$f=q{(.*)}.$t->strftime("%Y%m%d");s:$f:$1.$n->strftime("%Y%m%d"):e' *

Esses módulos devem estar no centro de perl > = 5.10, a menos que seu fornecedor tenha feito coisas estranhas na instalação principal.

    
por 19.09.2017 / 20:51