LoginSignup
0
0

【bash/powershell/cmd】ファイルを検索しコマンド (clang-format) を実行する

Posted at

目的

clang-formatを用いて C++ソースコードを整形しようとした場合、clang-foramt コマンド単体ではプロジェクタ内のフォルダを再帰的に検索して特定フォルダかつ特定拡張子のファイルを見つける、といったことができない。
そのためには bash におけるfindといった、ファイル検索用のコマンドを使用すればいい。しかし こうした汎用的なツールを用いた具体的なコマンドを毎回検索・作成するのは面倒であり、また特に以下の要件を満たす例を紹介しているページが見つからなかったため、ここに記録する。

  • 特定のサブフォルダ、特定の拡張子名のファイルのみを検索し、clang-format に渡す
  • Windows と Linux の両方でのケースを検討する。
  • シェル上で実行可能(ワンライナー)

参考文献

解決策

bash, powershell, cmd のそれぞれで、以下に記載する特定のフォルダ内の、特定の拡張子のファイルに対して、clang-format (dry-run オプション付き)を実行するコマンドを記載する。

  • 対象フォルダ名:src, test, include
  • 対象拡張子名:cpp, hpp, h, cc, cxx

bash(Linux)

find src test include -regex '.*\.\(cpp\|hpp\|h\)' -exec clang-format -style=file --dry-run --Werror -i {} \;

powershell(Windows)

clang-format -style=file --dry-run --Werror $(Get-ChildItem -Path $PWD/src,$PWD/test,$PWD/include -Recurse | Where Name -Match '.(?:cpp|hpp|h)$' | Select-Object -ExpandProperty FullName)

cmd(Windows)

コマンドプロンプトのみ、複数フォルダを同時に検索する方法は見つからなかった。

for /r .\src %a in (*.cpp *hpp *.h) do clang-format -style=file --dry-run --Werror %a

今後の改善点

  • (bash): xargs を使用する。
  • (Windows): WSL で実行できるならば、bash のコマンドを使用する。
  • (bash): -prune -oの書き方を使用し、特定ディレクトリを除外できるようにする。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0