Cambie el nombre de todos los archivos con un formato específico que se encuentran en una carpeta con un nombre específico

Cambie el nombre de todos los archivos con un formato específico que se encuentran en una carpeta con un nombre específico

En mi proyecto tengo muchos archivos de prueba, que se denominan *.ts.
Todos están en __tests__carpetas, pero puede ser __tests__/test1.ts, __tests__/dir2/test2.tsy así sucesivamente.

Me gustaría cambiar el nombre de esos archivos a *.test.ts.

¿Cómo podría hacerlo?

Ejemplos:

  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

Logré encontrar esos archivos con:

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

pero no tengo idea de cómo cambiarles el nombre.

Respuesta1

Necesita la -execopción de invocar un shell para realizar el cambio de nombre.

find . -type f -path '*__tests__*.ts' -exec sh -c '
  for f; do
    mv -- "$f" "${f%ts}test.ts"
  done
' findsh {} +
  • -exec sh -cInvoca un shell y ejecuta:
    • for f; do mv -- "$f" "${f%ts}test.ts"; doneRecorre los archivos encontrados y les cambia el nombre a un objetivo que tsse elimina y test.tsse coloca en su lugar.
  • En findsh {} +, findshes solo un marcador de posición y {} +es la construcción que proporciona los archivos al -execcomando (el shell).

información relacionada