특정 날짜 이전에 업데이트되거나 액세스되지 않은 내용(파일)이 있는 모든 디렉터리를 나열하시겠습니까?

특정 날짜 이전에 업데이트되거나 액세스되지 않은 내용(파일)이 있는 모든 디렉터리를 나열하시겠습니까?

보관/휴지통에 저장할 폴더를 쉽게 찾고 이를 자동화하는 쉬운 방법은 몇 년 동안 사용하지 않은 폴더를 선택하는 것입니다. 폴더 자체는 포함된 파일과 다른 수정 날짜를 가질 수 있으므로 이 작업을 수행하는 *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 .

관련 정보