7일이 지난 파일만 삭제: -mtime 및 find

7일이 지난 파일만 삭제: -mtime 및 find

비슷한 질문을 찾았지만 완전히 일치하지 않았습니다.

백업 디렉터리(sql)가 있고 해당 디렉터리에서 7일이 지난 모든 파일을 삭제하고 모든 하위 디렉터리를 그대로 유지하려고 합니다.

이것이 내가 가진 것입니다:

find /var/log/mbackups -mtime +7 -type f -delete

이것이 내가 원하는 것을 달성하는 올바른 방법입니까?

답변1

명령은 최상위 디렉터리를 조사 /var/log/mbackups하고 모든 하위 디렉터리로 드릴다운하여 7일 기준을 충족하는 파일을 삭제합니다. 디렉터리 자체는 삭제되지 않습니다.

/var/log/mbackups명령이 디렉토리에 있는 파일 만 확인하도록 하려는 경우하위 디렉터리에 들어가지 마세요., 다음 한도를 추가해야 합니다.

find /var/log/mbackups -maxdepth 1 -mtime +7 -type f -delete

일반적으로 작업을 무해한 것으로 대체하여 명령을 테스트할 수 있습니다. 예를 들어 find( 힌트된 대로 여기에서도 필요합니다):-delete-print-depth-delete-depth

find /var/log/mbackups -depth -mtime +7 -type f -print

답변2

zsh 사용:

rm -f /var/log/mbackups/*(.m+6)

그것은 다음과 같습니다:

rm -f /var/log/mbackups/*(.^m-7)

.숨김이 없고 지난 7일 동안 수정되지 않은 일반(with) 파일은 삭제됩니다. 와 마찬가지로 는 find다음 정수 일수로 반내림되고 엄격히 7보다 큰 파일을 일치시키므로 8일 이상 된 파일이 일치됩니다( 를 사용할 때 흔히 발생하는 함정 -mtime +7) .m+7find

오래된 숨겨진 파일도 제거하려면 Dglob 한정자를 추가하세요.

일치하는 파일이 없으면 오류 메시지가 표시됩니다. Nglob 한정자를 추가하면 이를 방지 할 수 있습니다 ( rm파일 이름 인수 없이 호출되지만 를 사용하면 -f이에 대해 불평하지 않아야 함).

답변3

면책조항: 저는 현재 생가죽(rh)의 저자입니다.https://github.com/raforg/rawhide)

거의. 아주 근접한. 시도 중인 올바른 버전은 다음과 같습니다.

find /var/log/mbackups -maxdepth 1 -mtime +6 -type f -delete

당신이 찾으면찾다술어 -mtime인수는 충분히 직관적이지 않습니다.생가죽(오른쪽 회전) 대신에:

rh -UUU -r /var/log/mbackups 'f && old(7*days)'

-UUU일치 항목을 연결 해제/삭제/제거합니다.

-r처럼찾다, -mindepth 1 -maxdepth 1검색 경로보다 한 수준 아래만 검색하므로 하위 디렉터리는 검색되지 않습니다.

f일반 파일을 일치시킵니다.

old(7*days)일치 콘텐츠는 최소 7일 전에 마지막으로 수정되었습니다.

답변4

경고: -delete사용은 비표준(비휴대용)이며 위험합니다 gfind.

rm몇 가지 보안 제한 사항이 있지만 매뉴얼 gfind페이지에는 이에 대한 언급이 없습니다 -delete. 따라서 공식적인 방법을 사용하는 것이 좋습니다.

find /var/log/mbackups -mtime +7 -type f -exec rm {} +

이는 비표준 방법을 사용하는 것보다 느리지 않습니다 -delete.

관련 정보