1일이 지난 폴더 삭제

1일이 지난 폴더 삭제

다음 명령을 사용하여 1일이 지난 모든 폴더를 삭제하고 싶습니다.

find /test -mmin +1440 | xargs rm -rf

find그러나 목록의 출력은 /test그에 따라 삭제됩니다.

하위 디렉토리만 어떻게 찾을 수 있나요 /test? ( -maxdepth/는 -mindepthAIX에서는 사용할 수 없습니다)

답변1

@meuh가 그의 의견에서 말했듯이 /test/*대신 사용할 수 있습니다 /test. 명령은 다음과 같습니다.

find /test/* -type d -mmin +1440 | xargs rm -rf

이 경우하위 폴더만/test삭제됩니다 .

답변2

POSIX적으로:

find /test/. ! -name . -type d -mtime +0 -exec rm -rf {} \; -prune

-prune(우리는 성공적으로 삭제된 디렉토리 에 대해 이를 사용하므로 find해당 디렉토리가 갑자기 사라지는 것에 대해 불평하지 않습니다.)

-mtime그럼에도 불구하고 카탈로그 파일의 수정 시간(위에서 검토한 대로)은 항목이 마지막으로 추가, 삭제되거나 이름이 변경된 시간만 반영한다는 점에 유의하십시오 .

링크된 파일의 내용(일반, 디렉토리 또는 기타 유형)이 수정되면 업데이트되지 않습니다. 특히 하위 디렉터리나 그 내용에 대한 변경 사항은 디렉터리 수정 시간에 영향을 주지 않습니다.

모두 -mindepth, -maxdepth-mmin는 GNU 확장입니다(일부 다른 구현에서도 지원되지만).

표준에 해당하는 것은 find . -maxdepth 1다음과 같습니다.

find . -name . -o -prune

을 위한 -mindepth 1:

find . ! -name .

을 위한 -mindepth 1 -maxdepth 1:

find . ! -name . -prune

이외의 디렉토리에 대해서는 .위와 find some/dir/. ...같이 사용합니다.

다른 깊이 값의 경우 를 사용할 수 있지만 -path최근에야 표준에 추가되었기 때문에 AIX와 같은 일부 시스템에는 아직 이 값이 없습니다.

을 위한: -maxdepth 2:

find . ! -path '*/*/*' -o -prune

을 위한: -mindepth 2:

find . -path '*/*/*'

다른 디렉토리의 경우:

find some/dir//. -path '*//*/*/*'

답변3

음, -mmin은 대부분 GNUism이고 AIX에서는 지원되지 않을 가능성이 높습니다. 왜냐하면 BSD 사용자와 제가 이미 1980년대에 사용했던 것과 비교하면 어리석은 확장이기 때문입니다. sfind가 AIX에서 잘 컴파일된다는 점을 고려하면 다음을 제안합니다.

sfind . -mindepth 1 -type d -mtime +24h -exec rm -rf {} +

코드는 schilytools에 있습니다.https://sourceforge.net/projects/schilytools/files/

답변4

find /test -type d -mtime +1| egrep -v '^/test$'|xargs -I{} rm -rf {}

관련 정보