特定の日付より前に更新またはアクセスされていないコンテンツ(ファイル)を含むすべてのディレクトリを一覧表示しますか?

特定の日付より前に更新またはアクセスされていないコンテンツ(ファイル)を含むすべてのディレクトリを一覧表示しますか?

アーカイブ/ごみ箱に保存するフォルダを簡単に見つけ、それらを自動化する簡単な方法は、長年使用していないフォルダを選択することです。フォルダ自体は含まれているファイルとは異なる変更日を持つ可能性があるため、これを実行する* nixコマンドがすでに存在するかどうか疑問に思います。

そうでない場合は、特定の日付より前に更新またはアクセスされていないディレクトリを探してから、その内容を繰り返し繰り返し、その日付以降にアクセスまたは変更されていないことを確認するスクリプトを作成できます。

しかし、そのようなツールがすでに存在する場合、私は車輪を再発明しません。

答え1

find /some/where -type d \( -atime +1234 -o -mtime +1234 \) -print | ...

答え2

ディレクトリのアクセス時間はほとんど役に立ちません。アクセス時間は、最初に実行されたとき、またはlsディレクトリfindで更新されます。

長い間アクセスしていないファイルを簡単に見つけることができます。

find . -type f -atime +999 -print

長い間ファイルにアクセスしていないディレクトリにのみ興味がある場合は、ディレクトリを参照するコマンドとディレクトリのファイルを参照するコマンドをfind一緒に使用できます。find

find . -type d -exec sh -c '
    recent=$(find "$0" -mindepth 1 -maxdepth 1 ! -type f -atime +999 -print | head -n 1)
    if [ -z "$recent" ]; then printf %s\\n "$0"; fi
  ' {} +

このコードスニペットは最近一般ファイルにアクセスしていませんが、最近アクセスしたファイルを含むディレクトリを印刷できます。ディレクトリを巡回するためにfind個別に削除して、多くの繰り返し-maxdepth 1ディスクアクティビティを引き起こさない限り、これらのエントリを個別にスキップすることは容易ではありません。これは、手動でディレクトリナビゲーションを実行して最近アクセスされていないファイルのみを含むディレクトリを追跡するテストされていないbashスクリプトです。

#!/bin/bash
shopt -s dotglob
explore () {
  local entry keep=
  for entry in "$1/"*; do
    if [ -L "$entry" ]; then
      :
    elif [ -d "$entry" ]; then
      if explore "$entry"; then
        keep=1  # Keep this directory, it contains kept directories
      fi
    elif [ -f "$entry" ]; then
      if [ -z "$(find "$entry" -atime +999 -print)" ]; then
        keep=1  # Keep this directory, it contains a recently-accessed file
      fi
    fi
  done
  if ((!keep)); then
    echo "$1"
    return 1
  fi
  return 0
}
explore .

関連情報