특정 패턴과 일치하는 하위 디렉터리를 제외한 모든 하위 디렉터리 삭제

특정 패턴과 일치하는 하위 디렉터리를 제외한 모든 하위 디렉터리 삭제

특정 패턴과 일치하는 디렉터리를 제외하고 해당 디렉터리의 모든 하위 디렉터리와 파일을 삭제하고 싶습니다.

example_dir/model-*/gen-*/share/**

일반 설정: 각 모델이 1세대 이상인 여러 모델(> 100)을 생성했습니다. 해당 모델(예: example_dir/model-0/gen-0/)에는 여러 디렉터리와 하위 디렉터리가 있습니다.

원하는 결과: 일치하는 항목을 제외한 모든 디렉터리와 파일을 삭제하고 싶습니다.

example_dir/model-*/gen-*/share/

각 단일 모델/세대/ 내에서는 다음과 같습니다.

rm -rf !(share)

답변1

귀하의 질문을 완전히 이해했는지 잘 모르겠고 후속 질문이 어떤 것인지 잘 모르겠습니다. 제가 궁금한 점 중 하나는 다음과 같은 디렉토리 트리가 있다면

example_dir
|-- model-0
|   |-- gen-0
|   |   |-- share
|   |   |-- trash
|   |   |   |-- more_trash
|   |   |-- file123.txt
|   |-- grandfather
|-- platypus
foo

(및 해당 내용)을 삭제하는 것으로 충분합니까 , 아니면 , 및 example_dir/model-0/gen-0/trash 도 삭제하시겠습니까 ? 그리고 어때요 ?example_dir/model-0/grandfatherexample_dir/platypusfooexample_dir/model-0/gen-0/file123.txt

trash및 해당 내용을 삭제하려면 file123.txt다음을 시도하십시오.

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)

trash(및 해당 내용)을 삭제하고 보존하려면 file123.txt다음을 시도하십시오.

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)/

/( 뒤에 추가 !(share)).

어느 쪽이든 출력을 주의 깊게 살펴보고 원하는 내용이 확실하다면  echo.

example_dir이외의 최상위 디렉터리 , 패턴과 일치하지 않는 첫 번째 수준 디렉터리 model-*또는 패턴과 일치하지 않는 두 번째 수준 디렉터리 도 삭제하려면 gen-*질문을 편집하여 명확히 하세요.

관련 정보