読者です 読者をやめる 読者になる 読者になる

特定のファイルがないディレクトリを抽出する

仕事でサーバ設定いじってて、ちょっと悩んだのでメモっておく。
とりあえず目的は達したけど、もっと簡単にできる方法があれば、ぜひ教えてください。

やりたいこと

同じ構成のディレクトリ群の中から、置き忘れる、消されるなどして必要なファイルが存在しないディレクトリを抽出したい。

やったこと

対象ファイルについて存在チェックすれば良いと考えたので、下記のようにディレクトリのリストに対象のファイル名を連結して test コマンドに渡すようにした。
ここでは、hoge/piyo.txt が必要なファイル。
ディレクトリの構成によっては、find に maxdepth オプションも指定した方がいいはず。

[~/tmp/test] $ find .
.
./dir1
./dir1/fuga
./dir1/hoge
./dir1/hoge/piyo.txt
./dir2
./dir2/fuga
./dir2/hoge
./dir3
./dir3/fuga
./dir3/hoge
[~/tmp/test] $ find . -type d -mindepth 2|grep '/hoge$'|awk '{cmd = sprintf("test -e %s/piyo.txt", $0);r = system(cmd);if(r == 1) print $0}'
./dir2/hoge
./dir3/hoge
[~/tmp/test] $