Copia arquivos e substitui o token no nome do arquivo?

2

Estou fazendo o Projeto Euler há muito tempo. Eu tenho uma estrutura de projeto que torna realmente fácil criar uma nova pasta para a próxima pergunta e eu tenho alguns arquivos booletos para começar.

ProjectEuler/001/001.go
ProjectEuler/001/001_test.go
ProjectEuler/002/002.go
ProjectEuler/002/002_test.go
...
ProjectEuler/new_question_stub/xxx.go
ProjectEuler/new_question_stub/xxx_test.go

Quando eu crio a pasta de uma nova pergunta, eu executo estes comandos:

ProjectEuler $ mkdir 003
ProjectEuler $ cd 003
ProjectEuler/003 $ cp ../new_question_stub/xxx.go 003.go
ProjectEuler/003 $ cp ../new_question_stub/xxx_test.go 003_test.go

Eu sinto que deveria haver alguma maneira de dizer "copie todos os arquivos de um diretório específico para o diretório atual, mas substitua o token xxx por 003." Não precisa ser um comando para copiar e renomear de uma só vez. Copiá-los é bastante fácil, mas como eu os renomeia depois de copiados?

Edit: meu caso de uso é um exemplo bastante trivial de apenas dois arquivos, mas estou procurando uma maneira de fazer isso para um número arbitrário de arquivos.

    
por Corey Ogburn 03.04.2018 / 17:06

2 respostas

0

Ok, usando um loop for ? Como

for file in ../new_question_stub/*; do cp "$file" "003${file#*xxx}"; done

Talvez você queira definir uma função para isso

    
por 03.04.2018 / 17:23
-1

Você pode primeiro copiar todos os arquivos xxx_* e usar perl rename para renomeá-los:

rename "s,^xxx,"$(basename $(pwd))"," *
    
por 03.04.2018 / 17:11