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

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

私のプロジェクトにはという名前のテストファイルがたくさんあります*.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その場所にを配置します。
  • inは、findsh {} +コマンド(シェル)にファイルを提供する構文のプレースホルダーですfindsh{} +-exec

関連情報