findとsedを一緒に使うshellスクリプト
実現したいこと
- プロジェクトフォルダにある全ての
test_
で始まり.py
で終わるファイルをfindで抽出
- findで抽出された
./server/sample.py
のPathをserver/sample.py
にsedで置換(./
の部分を消す)
結論
find . -name '*.py' -name 'test_*' | sed -e "s/\.\///"
解説
find
の解説
test_
で始まり.py
で終わるファイルをfindで抽出./server/sample.py
のPathをserver/sample.py
にsedで置換(./
の部分を消す)find . -name '*.py' -name 'test_*' | sed -e "s/\.\///"
解説
find
の解説
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
を生成しないコマンドオプション
Author And Source
この問題について(findとsedを一緒に使うshellスクリプト), 我々は、より多くの情報をここで見つけました https://qiita.com/juchilian/items/2ec8c8fc37c370a9c579著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .