これはとてもユニークです。
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
が一意にソートされます。