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