レポートディレクトリが多く、report.md
ディレクトリにレポートが含まれているファイルは常に存在しますが、report.pdf
完了したレポートにのみあるとします。存在を探したいのですがreport.md
何もありませんreport.pdf
。
reports_dir
|
+-- project_xyz
| +-- report.md
| +-- image.png
|
+-- bugs
| +-- report.md
| +-- report.pdf
| +-- Makefile
|
+-- homework
+-- report.pdf
+-- test.md
この機能をsearch "reports_dir" --include "report.md" --exclude "report.pdf"
次のように使用する/project_xyz
と、/bugs
/homework
sh
/でこれらの検索を実行する最速の方法は何ですかbash
? (シングルライン優先順位)
ベストアンサー1
for f in "$1"/*/"$2"; do dir=$(dirname -- "$f"); [ -f "$dir/$3" ] || printf '%s\n' "$dir"; done
スクリプトの最初のパラメータは親ディレクトリsearch
、2番目のパラメータはインクルードディレクトリ、3番目のパラメータは除外ディレクトリです。
sh search "reports_dir" "report.md" "report.pdf"
"$1"/*/"$2"
report.md
例では、ファイルパスのみを取得します。dir=$(dirname -- "$f")
このファイルのディレクトリパスを取得します(改行文字で終わらないと仮定)。[ -f "$dir/$3" ]
ディレクトリ()の3番目のパラメータにファイルが存在するかどうかをテストしますreport.pdf
。定期的なタイプ(ディレクトリ、fifo、デバイス...いいえ)。|| printf '%s\n' "$dir"
存在しない場合(または存在しない場合)定期的なファイル)、ディレクトリ名を印刷します。