![7일이 지난 파일만 삭제: -mtime 및 find](https://rvso.com/image/134439/7%EC%9D%BC%EC%9D%B4%20%EC%A7%80%EB%82%9C%20%ED%8C%8C%EC%9D%BC%EB%A7%8C%20%EC%82%AD%EC%A0%9C%3A%20-mtime%20%EB%B0%8F%20find.png)
몇 가지 유사한 질문을 찾았지만 일치하지 않았습니다.
백업용 디렉터리(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
).
오래된 숨겨진 파일도 제거하려면 D
glob 한정자를 추가하세요.
일치하는 파일이 없으면 오류 메시지가 표시됩니다. 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
.