특정 문자열로 시작하는 모든 디렉터리 삭제

특정 문자열로 시작하는 모든 디렉터리 삭제

graphene-80로 시작하는 모든 디렉토리를 삭제하려면 어떤 명령을 사용해야 합니까 /tmp?

rm명령에 옵션으로 무엇을 추가할 수 있나요 ?

답변1

패턴과 일치하는 디렉터리 삭제graphene-80* 바로 아래/tmp, 사용

rm -rf /tmp/graphene-80*/

여기서 후행은 이름이 패턴과 일치하는 디렉터리(또는 디렉터리에 대한 심볼릭 링크) /만 삭제되고 파일 등은 삭제되지 않도록 합니다.graphene-80*

아래의 다른 곳에서 일치하는 디렉터리를 찾아 /tmp삭제하려면(어디에 있든) 다음을 사용하세요.

find /tmp -type d -name 'graphene-80*' -prune -exec rm -rf {} +

디렉토리 삭제 시 디렉토리 이름을 추가로 보려면 -print앞에 를 삽입하세요 -exec.

우리가 찾고 있는 이름을 가진 디렉토리에 대한 테스트 -type d와 테스트 둘 다입니다. -name 'graphene-80*'검색 경로에서 -prune발견된 디렉터리를 제거하고(제거된 디렉터리 내부를 살펴보고 싶지 않음) 마지막으로 다음 -exec을 호출하여 실제 삭제를 수행합니다.rm


댓글의 질문에 대한 답변: "이 디렉터리의 모든 파일을 삭제하려면 어떻게 해야 합니까(디렉터리 자체는 삭제하지 않음)?"

다음 중 하나:

  • 디렉터리를 삭제한 후 다시 만듭니다.

    find /tmp -type d -name 'graphene-80*' -prune \
        -exec rm -rf {} \; -exec mkdir {} +
    

    또는 두 작업을 일괄적으로 보다 효율적으로 수행할 수 있습니다.

    find /tmp -type d -name 'graphene-80*' -prune \
        -exec sh -c 'rm -rf "$@"; mkdir "$@"' sh {} +
    

    이 방법의 장점은 명령이 간단하다는 것입니다(아래 명령에 비해).

  • 발견된 디렉토리에서 이름(파일 및 디렉토리)만 삭제하려면 작은 인라인 쉘 스크립트를 사용하십시오.

    find /tmp -type d -name 'graphene-80*' -prune -exec bash -O nullglob -O dotglob -c '
        for dirpath do
            rm -rf "$dirpath"/*
        done' bash {} +
    

    bash그러면 일괄적으로 발견된 디렉터리 경로 이름이 포함된 작은 인라인 스크립트가 실행됩니다 . 쉘은 쉘 옵션 세트 nullglob로 시작됩니다. dotglobnullglob옵션은 일치하지 않는 쉘 패턴을 다음으로 확장합니다.아무것도 없다확장되지 않은 상태로 두는 대신 dotglob쉘 옵션을 사용하여 숨겨진 이름을 일치시킵니다( *기본적으로 숨겨진 이름과 일치하지 않음). 스크립트는 지정된 디렉터리 경로를 반복하고 각 디렉터리를 재귀적으로 비웁니다.

    이것의 장점은 마운트 지점이 되는 디렉토리 경로 찾기를 완벽하게 처리할 수 있다는 것입니다. 단점은 명령이 복잡하고 명령이 수행하는 작업을 설명하기 위해 이 모든 텍스트를 작성해야 한다는 사실입니다(이는 다음 사람이 스크립트 유지 관리를 인계받기 어려울 수 있음을 의미함).

답변2

사용찾다주문하다:

find /tmp -type d -name 'graphene-80*' -delete

사용된 매개변수:

  • -type디렉터리만 필터링하고 파일 찾기 방지
  • -name따옴표 사이에 정의된 패턴과 일치하는 파일 찾기
  • -deletefind 명령 결과 삭제

편집: 클리너는 -delete이 게시물에 표시된 것과 동일합니다. 템플릿과 일치하는 파일을 찾아서 삭제하세요.

답변3

이름이 일치하는 빈 디렉토리만 삭제하려면 graphene-80*다음을 수행하십시오.

find /tmp -type d -name "graphene-80*" -exec rmdir {} +

또는

find /tmp -type d -name "graphene-80*" -delete

( rmdirGNU find에서는 null이 아닌 오류가 발생합니다.)

디렉터리와 해당 콘텐츠를 삭제하려면 다음 안내를 따르세요.

find /tmp -type d -name "graphene-80*" -exec rm -r {} \; -prune

(중첩된 일치 디렉터리가 있으면 오류가 발생할 수 있습니다 -exec rm +. 없으면 방금 제거한 디렉터리로 드롭다운하려고 시도하므로 오류가 발생할 수 있습니다.)rm-prunefind

답변4

다음 명령을 사용할 수 있습니다.고쳐 쓰다

find /tmp -type d -name 'graphene-80*' -prune -exec rm -rf {} +

관련 정보