Переименовать все файлы определенного формата, находящиеся в папке с определенным именем.

Переименовать все файлы определенного формата, находящиеся в папке с определенным именем.

В моем проекте есть много тестовых файлов, которые называются *.ts.
Они все в __tests__папках, но это могут быть __tests__/test1.ts, __tests__/dir2/test2.tsи так далее.

Я хотел бы переименовать эти файлы в *.test.ts.

Как я мог это сделать?

Примеры:

  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

Мне удалось найти эти файлы с помощью:

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

но не знаю, как их переименовать.

решение1

-execДля выполнения переименования вам понадобится возможность вызвать оболочку.

find . -type f -path '*__tests__*.ts' -exec sh -c '
  for f; do
    mv -- "$f" "${f%ts}test.ts"
  done
' findsh {} +
  • -exec sh -cВызывает оболочку и запускает:
    • for f; do mv -- "$f" "${f%ts}test.ts"; doneПросматривает найденные файлы, переименовывая их в целевой файл, который tsудаляется, а test.tsна его место помещается a.
  • В findsh {} +, findshявляется просто заполнителем и {} +представляет собой конструкцию, которая передает файлы команде -exec(оболочке).

Связанный контент