Renomeie todos os arquivos com formato específico que estão na pasta com nome específico

Renomeie todos os arquivos com formato específico que estão na pasta com nome específico

No meu projeto, tenho muitos arquivos de teste, chamados *.ts.
Eles estão todos em __tests__pastas, mas podem ser arquivos __tests__/test1.ts, __tests__/dir2/test2.tse assim por diante.

Eu gostaria de renomear esses arquivos para *.test.ts.

Como eu poderia fazer isso?

Exemplos:

  1. project/src/__tests__/app.ts->project/src/__tests__/app.test.ts
  2. project/src/dashboard/__test__/start/login.ts->project/src/dashboard/__test__/start/login.test.ts

Consegui encontrar esses arquivos com:

find . -type f -path '*__tests__*.ts'

mas não tenho ideia de como renomeá-los.

Responder1

Você precisa da -execopção de invocar um shell para realizar a renomeação.

find . -type f -path '*__tests__*.ts' -exec sh -c '
  for f; do
    mv -- "$f" "${f%ts}test.ts"
  done
' findsh {} +
  • -exec sh -cInvoca um shell e executa:
    • for f; do mv -- "$f" "${f%ts}test.ts"; doneFaz um loop nos arquivos encontrados, renomeando-os para um destino cujo tsé removido e a test.tsé colocado em seu lugar.
  • Em findsh {} +, findshé apenas um espaço reservado e {} +é a construção que fornece os arquivos ao -execcomando (o shell).

informação relacionada