최대 깊이가 2 이상인 하위 디렉터리만 삭제하세요.

최대 깊이가 2 이상인 하위 디렉터리만 삭제하세요.

6개의 하위 디렉터리가 있는 디렉터리가 있는데 그중 3개만 삭제하고 싶기 때문에 for 루프를 사용하여 이 3개 디렉터리에서 "cd"를 수행했지만 깊이가 2(최대 깊이, 최대 깊이)인 하위 디렉터리를 삭제하려고 합니다. 최소 깊이는 3개의 하위 디렉터리 내에서 2)입니다. 기본(기본은 3개의 하위 디렉터리 중 하나)에서 find 명령을 사용하지만 깊이 1(예상)에서 디렉터리를 찾습니다.

내 파일 구조는 다음과 같습니다. /a/b/c/d/e (a는 반복 중인 3개 디렉터리 중 하나입니다.)

다음은 도움/안내가 필요한 코드의 일부입니다. find /a -mindepth 2 -maxdepth 2 -type d -mtime +30

이것은 출력됩니다 - ./b/c

그래서 나도 그래아니요디렉터리를 삭제 /b하고 해당 디렉터리 c및 깊이 이하/내부 만 삭제하고 싶습니다.

이를 수행할 수 있는 방법이 있습니까? 아니면 디렉토리로 CD를 이동해야 합니까 b?

답변1

rm -rf찾은 디렉토리에서 실행 하도록 명령을 수정할 수 있지만 다음을 수행해야 합니다.매우 조심스럽다데이터 손실이 발생할 수 있기 때문입니다. 수행 방법은 다음과 같습니다.

find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec rm -rf {} \;

언제나 그렇듯이 먼저 명령을 테스트해야 합니다 echo.

find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec echo "Deleting: {}" \;

그러면 삭제할 디렉터리가 인쇄되므로 실제로 항목을 삭제하기 전에 명령의 동작을 확인할 수 있습니다.

편집하다:비슷한 것을 찾고 계십니까? 다음 명령은 파괴적이지 않습니다.

find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec sh -c 'cd "{}" && echo "Deleting contents of $(pwd)"' \;

이 명령파괴적이다!

find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec sh -c 'cd "{}" && rm -rf *' \;

답변2

면책조항: 저는 현재 생가죽(rh)의 저자입니다.https://github.com/raforg/rawhide)

안녕하세요. 생가죽(rh)을 사용하면 다음을 수행할 수 있습니다.

rh -m2 -M2 -x 'rm -r %s' /a 'd && old(30*days)'

가장 먼저 확인해야 할 사항:

rh -m2 -M2 -x 'echo rm -r %s' /a 'd && old(30*days)'

-m2동일합니다 -mindepth 2.

-M2동일합니다 -maxdepth 2.

-x ...일치할 때마다 주어진 쉘 명령을 실행합니다.

%s일치하는 파일 경로(예: find {})로 대체됩니다.

/a검색 경로입니다.

'd && old(30*days)'최소 30일 d동안 수정(항목 추가 또는 제거)되지 않은 디렉토리와 일치합니다( ).old(30*days)old(month)

참고: mtime디렉터리 확인에서는 각 디렉터리 자체만 고려하며 해당 내용은 mtime고려하지 않습니다 . mtime도 이렇습니다 find.

답변3

도움이 되는 의견을 주신 모든 분들께 감사드립니다. 내 문제/문제를 내 개인용 컴퓨터에 재현할 수 있었습니다.

다음 명령을 사용하여 문제를 해결할 수 있었습니다. 코드 좀... base2=$(pwd)즉, /a find $base2 -mindepth 2 -maxdepth 2 -type d -mtime +30 | xargs rm -R 이는 출력되지만 /a/b/c지정된 대로 깊이가 2인 디렉터리만 삭제합니다. 즉, /c 명령이 실행된 후 /a/b요청한 작업을 수행합니다.

관련 정보