大量のデータがダンプされたディレクトリがあり、最近(過去5日以内に)内容が変更されていないすべてのディレクトリを探したいと思います。私が探しているものを実行するために呼び出しを作成しようとしていますが、find
これがfindが処理できるよりも複雑であるかどうか疑問になり始めました。私が試したことは次のとおりです。しかし、期待どおりに動作しませんでした。
find "$DUMP_DIR" -type d -d 2 \
-execdir bash -c 'find . -mtime -5 >/dev/null 2>&1' \; \
-prune
ディレクトリ構造のレイアウトはおおよそ次のとおりです$DUMP_DIR/category{1,2,3,4,5}/thing*
。thing*
最近、どのディレクトリに新しいデータがダンプされたかを知りたいです。無邪気な解決策はfind "$DUMP_DIR" -type d -d 2 -mtime +5
私が望むものよりも優れています。
私はこの式がディレクトリに過去5日以内に変更されたコンテンツが含まれているかどうかを理解することを期待していましたが-execdir
(何も見つからない場合はゼロ以外の値を返します)、実際にはそうではありません。
OS XにBSD findをインストールするのを妨げました。また、標準のコマンドラインユーティリティでないものはインストールしたくありません。これを行う最も合理的な方法は何ですか?
ベストアンサー1
私はこれがあなたのニーズに合うと信じています。各ディレクトリを順番に見て、「最近変更された」ファイルを確認します。
find * -type d |
while read DIR
do
LINES=$(find "$DIR" -maxdepth 1 -type f -mtime -5 -print -quit)
test -z "$LINES" && echo "$DIR NOT RECENTLY MODIFIED"
done
あなたの場合に合わない場合は、find ... -maxdepth 1
次のように自由に変更してください。
LINES=$(find "$DIR" \( -type d -prune \) -o \( -type f -mtime -5 -print -quit \))
最近変更されたアイテムの数を計算したい場合(または-quit
利用できない場合)に機能します。
LINES=$(find "$DIR" -maxdepth 1 -type f -mtime -5 | wc -l | tr -d' ')
test 0 -eq "$LINES" && echo "$DIR NOT RECENTLY MODIFIED" || echo "$DIR has $LINES recent file(s)"