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일 동안 수정되지 않은 일반(포함) 파일을 제거합니다 . find의 경우 -mtime +7와 마찬가지로 m+7다음 정수 일수로 내림된 기간이 7보다 큰 파일에 대해 일치하므로 8일 이상 된 파일에 대해 일치합니다( 로 작업할 때 흔히 발생하는 함정 find).

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

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

답변3

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

거의. 매우 가깝습니다. 시도의 올바른 버전은 다음과 같습니다.

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

당신이 발견하면찾다-mtime술어 인수는 충분히 직관적이지 않으므로 다음을 사용할 수 있습니다.생가죽(rh) 대신에:

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.

관련 정보