X일이 지난 파일 삭제

X일이 지난 파일 삭제

폴더에서 5일이 지난 파일을 삭제하는 명령을 찾았습니다.

find /path/to/files* -mtime +5 -exec rm {} \;

하지만 이 폴더 내의 하위 디렉터리에 대해 이 작업을 어떻게 수행합니까?

답변1

rm으로 파이프할 때 특수 파일 이름(공백, 따옴표)에 주의하세요.

안전한 대안이 있습니다 --삭제옵션:

find /path/to/directory/ -mindepth 1 -mtime +5 -delete

그게 다입니다. 별도의 rm 호출이 필요하지 않으며 파일 이름에 대해 걱정할 필요가 없습니다.

-delete명령을 실행하기 전에 테스트하려면 (묵시적으로)로 바꾸십시오.-depth -print-delete-depth

설명하다:

  • -mindepth 1: 이것이 없으면 .(디렉토리 자체)도 일치하여 제거될 수 있습니다.
  • -mtime +5: 마지막으로 수정된 데이터가 5*24시간 전인 파일을 처리합니다.

답변2

너무 많은 파일이 발견되면 이 명령이 작동하지 않습니다. 다음과 같은 오류가 발생합니다.

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

이는 exec 시스템 호출에 대한 명령줄 길이 제한이 초과되었음을 의미합니다. 이런 식으로 rm을 실행하는 것보다 사용하는 것이 더 효율적입니다.매개변수. 다음은 실제 예입니다.

find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm

이렇게 하면 수정된 지 14일이 넘은 /root/Maildir/ 아래의 모든 파일(f 유형)이 삭제되고 그보다 더 깊은 곳(최소 깊이 1)이 반복적으로 삭제됩니다.더 많은 옵션을 보려면 찾기 매뉴얼을 참조하세요..

답변3

똑같다. 파일 접두사 대신 상위 디렉터리만 제공하면 됩니다. 귀하의 예에서는 다음과 같습니다.

find /path/to -type f -mtime +5 -exec rm {} \;

/path/to이렇게 하면 해당 파일과 5일이 지난 하위 디렉터리가 모두 삭제됩니다.

빈 하위 디렉터리를 제거하려면 위의 @Costas의 설명을 참조하세요.

답변4

find . -mtime +3 -type f -not -name '*pid*' |xargs rm -rf

관련 정보