最近変更されたファイルが含まれていないフォルダを見つける方法は?

最近変更されたファイルが含まれていないフォルダを見つける方法は?

大量のデータがダンプされたディレクトリがあり、最近(過去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)"

おすすめ記事