一部のファイルは存在しますが、他のファイルは存在しないディレクトリを見つける方法

一部のファイルは存在しますが、他のファイルは存在しないディレクトリを見つける方法

レポートディレクトリが多く、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"存在しない場合(または存在しない場合)定期的なファイル)、ディレクトリ名を印刷します。

おすすめ記事