30日以内に変更されたファイルを含むサブディレクトリを含むすべての最上位ディレクトリを一覧表示するスクリプトまたはコマンド

30日以内に変更されたファイルを含むサブディレクトリを含むすべての最上位ディレクトリを一覧表示するスクリプトまたはコマンド

これはとてもユニークです。

30日以内に、新しいファイルまたは変更されたファイルを含むサブディレクトリを含むフォルダ内のすべての最上位ディレクトリを一覧表示する方法を探しています。

レプリケーション方法を使用してユーザーファイルを中央リポジトリに同期し、先月にどのユーザーがファイルを同期したかを監視する方法を探しています。これにより、存在しない問題を解決できます。

"find . -type d -mtime -30"を使用しましたが、これはすべてのサブフォルダを一覧表示し、出力が大きすぎて簡潔な画像を提供することはできません。

どんな助けでも大変感謝します。

答え1

私はfind各ディレクトリを順番にインポートし、パイプを介してディレクトリがgrep -q .存在することを確認します。どの結果があるかどうかに応じて、条件付きでディレクトリ名を印刷します。

for d in */; do find "$d" -type f -mtime -30 | grep -q . && printf %s\\n "$d"; done

答え2

これは効率的ではないかもしれません。

find -mindepth 3 -maxdepth 3 -type f -mtime -30 | 
    xargs -n 1 dirname | 
    xargs -n 1 dirname | 
    uniq # (or sort -u, I assume find's output is already sorted)

答え3

find */ -type f -mtime -30 -print0 | 
    sed -z -e  's:/.*$::' | 
    sort -z -u | 
    tr '\000' '\n'

GNUsortおよびGNU(NUL分離入力)オプションが必要ですsed-z

find現在のディレクトリのサブディレクトリにある30日を超えていないすべてのファイルを一覧表示します。出力はパイプで接続され、sed最初の項目以降のすべての項目が削除され、結果のディレクトリ/sortが一意にソートされます。

関連情報