비슷한 질문을 찾았지만 완전히 일치하지 않았습니다.
백업 디렉터리(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+7
find
오래된 숨겨진 파일도 제거하려면 D
glob 한정자를 추가하세요.
일치하는 파일이 없으면 오류 메시지가 표시됩니다. N
glob 한정자를 추가하면 이를 방지 할 수 있습니다 ( 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
.