다음 명령을 사용하여 1일이 지난 모든 폴더를 삭제하고 싶습니다.
find /test -mmin +1440 | xargs rm -rf
find
그러나 목록의 출력은 /test
그에 따라 삭제됩니다.
하위 디렉토리만 어떻게 찾을 수 있나요 /test
? ( -maxdepth
/는 -mindepth
AIX에서는 사용할 수 없습니다)
답변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 {}