500일이 지난 파일 삭제

500일이 지난 파일 삭제

내 디렉터리에는 2010년의 파일이 포함되어 있습니다. 500일이 지난 모든 파일을 삭제하고 싶습니다. 다음을 시도했습니다.

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

하지만 나는 그것을 이해합니다:

-bash: /usr/bin/find: Argument list too long

제가 아는 한 이는 파일이 너무 많아 find처리할 방법이 없다는 의미입니다. 하지만 +20003년 넘게 시간을 투자한 후에도 여전히 이것을 얻습니다.

내가 여기서 무엇을 놓치고 있는 걸까요?

답변1

find파일 목록이 입력으로 필요하지 않은 경우가 누락되었습니다 . 문제는 glob이 /var/log/arc/*너무 많은 파일로 확장된다는 것입니다. 그러나 find하위 디렉터리로의 반복은 기본적으로 수행되므로 glob을 전혀 사용할 필요가 없습니다.

find /var/log/arc/ -type f -mtime +500 -delete

-delete비표준 술어입니다. 구현이 이를 지원하지 않는 경우 find다음을 사용할 수 있습니다.

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

대신에.

답변2

면책조항: 저는 현재입니다생가죽(오른쪽 회전) (바라보다https://github.com/raforg/rawhide)

당신이 놓치고 있는 것은찾다디렉터리( /var/log/arc)만 필요하며 디렉터리( )의 모든 파일이 필요하지는 않습니다 /var/log/arc/*. /*{}\;(거기에 없어야 함) 을 제거하면 문제가 해결됩니다.GNU 찾기. 비GNU 찾기-delete {}\;, 로도 바꿔야 합니다 -exec /bin/rm '{}' \;.

FWIW, 대안찾다내 것이 되어라생가죽(오른쪽 회전) 프로그램. 이를 통해 다음을 수행할 수 있습니다.

rh -UUU /var/log/arc 'f && old(500*days)'

매우 유사하지만 더 짧고 읽기 쉽습니다.

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

f(또는 file)은 일반 파일과 일치합니다.

old(500*days)최소 500일 전에 수정된 파일과 일치합니다.

관련 정보