31일 이상 업데이트되지 않은 모든 파일, 폴더 및 하위 폴더를 삭제하는 명령이 필요합니다. 나는 이것을 시도했다
find . -mindepth 1 -mtime +31 -exec rm -rf "{}" \;
하지만 이런 계층구조가 있다면
.
├── old_sub_folder1
└── old_sub_folder2
├── old_file
└── old_sub_folder3
└── new_file
old_*
이전 폴더\파일은 어디에 있고 new_file
새 파일은 어디에 있습니까?
이 명령은 모든 것을 삭제합니다. 날짜가 old_sub_folder2
생성된 후에는 업데이트되지 않기 때문입니다.new_file
old_sub_folder2/old_sub_folder3/new_file을 삭제하지 않는 명령이 필요합니다
답변1
문제는 명령 -r
에 옵션을 추가한다는 것입니다. rm
폴더가 비어 있지 않더라도 폴더가 삭제됩니다.
이 작업은 두 단계로 수행해야 합니다.
삭제만오래된 파일:
find . -type f -mtime +31 -delete
이전 폴더를 삭제하려면 해당 폴더가 비어 있으면 다음을 확인하세요.여기, 약간 조정합니다.
find . -type d -empty -mtime +31 -delete
답변2
find . -type d ! -name . -mtime +31 -exec sh -c '
case $(find "$1" ! -mtime +31 -exec echo x \; -prune) in
"" ) rm -rf "$1" || echo "Error could not delete folder \"$1\"" ;;
esac
' {} {} \;
현재 카탈로그에서 지난 31일 이후 업데이트되지 않은 카탈로그 find
만 실행하고 봅니다 . directories
각 디렉토리에서 순차적으로 드릴다운하여 31일보다 오래되지 않은 항목을 찾습니다. 이를 찾으면 더미 문자를 에코하고 모든 전방 검색을 잘라냅니다(이상적으로는 검색을 종료해야 함). -quit
그러나 이는 POSIX
허용되지 않습니다 -prune
.
그런 다음 이 작업의 결과를 찾고 find
결과가 비어 있으면 하나의 요소(파일/디렉터리/링크/등)도 새로운 것이 아니므로 이 디렉터리라는 것을 알 수 있습니다. 삭제해도 안전합니다.