実現したいこと
- プロジェクトフォルダにある全ての
test_で始まり.pyで終わるファイルをfindで抽出 - findで抽出された
./server/sample.pyのPathをserver/sample.pyにsedで置換(./の部分を消す)
結論
find . -name '*.py' -name 'test_*' | sed -e "s/\.\///"
解説
findの解説
findの後の.は探すディレクトリがカレントディレクトリであることを示す。
-nameで探すファイル名の条件を指定できる(-nameを追加していくとAND検索になる)
1つ目の'*.py'が.pyで終わるファイル
2つ目の'test_'がtest_で始まるファイル
sedの解説
sはsコマンドは正規表現で置換処理をする宣言。
"s/[置換前]/[置換後]/[オプション(任意)]"となる
今回の場合は、
[置換前]の部分が\.\/を示している。
バックスラッシュ(\)は.と/にエスケープが必要なため入っている。
[置換後]の部分は無し。理由は今回は./の部分を消したいから。
[オプション(任意)]も今回はなし。
参考記事: (sed コマンド)[https://hydrocul.github.io/wiki/commands/sed.html]
どう使えるのか?
python3 -m unittest [テストファイルへのPATH]で自動でプロジェクトフォルダ内の全てのユニットテストを実行したかった。
実際のシェルスクリプト
py-test.sh
# !/usr/bin/env bash
# find all test files
testFiles=($(find . -name '*.py' -name 'test_*' | sed -e "s/\.\///"))
# test each file
for file in ${testFiles[@]}
do
echo "TEST: $file"
python3 -B -m unittest $(echo $file)
echo
done
補足
-Bはpycacheを生成しないコマンドオプション