実現したいこと
- プロジェクトフォルダにある全ての
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
を生成しないコマンドオプション