特定の名前のフォルダにある特定の形式のすべてのファイルの名前を変更します

特定の名前のフォルダにある特定の形式のすべてのファイルの名前を変更します

私のプロジェクトには、 という名前のテスト ファイルが多数あります*.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代わりに が配置されます。
  • ではfindsh {} +、はfindsh単なるプレースホルダーであり、はコマンド (シェル){} +にファイルを渡す構成要素です。-exec

関連情報