디렉터리에서 오래된 파일을 삭제하지만 루트 디렉터리는 삭제하지 않음

디렉터리에서 오래된 파일을 삭제하지만 루트 디렉터리는 삭제하지 않음

현재 매시간 표시된 경로의 모든 파일과 디렉터리를 삭제하도록 crontab을 구성하고 있습니다.

내 현재 솔루션은 두 줄이므로 누군가가 이것을 한 줄로 바꾸는 방법을 말해 줄 수 있기를 바랍니다. 현재 두 번째 명령 complete도 디렉터리를 삭제합니다. complete디렉토리를 유지하고 삭제하고 싶습니다 complete.

내가 뭘 잘못했나요? 뒤에 슬래시가 있으면 안되나요 complete? /*?

60분보다 오래된 디렉터리의 파일을 삭제하려면 다음 안내를 따르세요.

0 */1 * * * find /root/Downloads/complete/ -type f -mmin +60 -delete

60분보다 오래된 디렉터리를 삭제하려면 다음 안내를 따르세요.

0 */1 * * * find /root/Downloads/complete/ -type d -mmin +60 -exec rm -r "{}" \;

답변1

아마 당신 말은

0 */1 * * * find /root/Downloads/complete/* -type d -mmin +60 -exec rm -r "{}" \;

귀하의 예에서는 find디렉터리 이름(및 그 아래의 모든 항목)이 일치하지만 와일드카드를 사용하면 쉘은 디렉터리 이름을 디렉터리 아래의 모든 항목(롤 호출 제외)으로 확장합니다.

답변2

이 줄을 사용하세요.

 0 */1 * * * find /root/Downloads/complete/ \( -type f -o -type d \) -mmin +60 -delete

/root/Downloads/complete/한 시간 전부터 수정된 경로 아래의 파일과 디렉터리만 삭제됩니다.

답변3

find /root/Downloads/complete/ -type d -mmin +60 -exec rm -r "{}" \;

디렉터리나 하위 디렉터리의 파일이 최근에 수정된 경우에도 디렉터리 자체가 한 시간 내에 수정되지 않은 경우 디렉터리와 해당 내용이 모두 삭제됩니다. 이것은 당신이 원하는 것이 아닐 수도 있습니다.

디렉토리 수정 시간은 그다지 유용하지 않을 수 있습니다. 이전 파일을 삭제한 다음 비어 있는 디렉터리를 삭제하는 것이 좋습니다. 루트 디렉터리 삭제를 방지하려면 -mindepth 1.

cd /root/Downloads/complete && find . -type f -mmin +60 -delete && find . -depth -mindepth 1 -type d -empty -delete

이로 인해 손상이 발생할 수 있습니다. 예를 들어 방금 생성하여 다른 프로그램에서 사용 중인 디렉터리를 삭제할 수 있습니다. 시간 초과에 따라 콘텐츠를 삭제하는 것은 좋은 생각이 아닙니다. 무언가를 삭제해야 하는 경우 임의로 지연된 후가 아니라 파일이 만족스럽게 처리된 후에 삭제해야 합니다.

관련 정보