Linux의 특정 폴더에 있는 모든 파일을 제거합니다.

Linux의 특정 폴더에 있는 모든 파일을 제거합니다.

내 CentOS 서버의 여러 위치에 두 개의 폴더로 구성된 특정 그룹이 있습니다. 이 폴더가 다음과 같다고 가정해 보겠습니다.

aaa/bbb/cat
aaa/bbb/dog

aaa, bbb및 의 이름과 구조는 고정되어 cat있지만 dog서버의 여러 위치에서 발생합니다. 예를 들어:

/folder1/aaa/bbb/cat
/folder1/aaa/bbb/dog
/folder2/folder3/folder4/aaa/bbb/cat
/folder2/folder3/folder4/aaa/bbb/dog
etc...

위에 표시된 대로 catdog서버 의 모든 인스턴스 내의 모든 파일을 삭제하려면 어떤 명령을 사용할 수 있습니까 ? 단, 해당 파일이 bbb및 각각의 하위 폴더인 경우에만 해당됩니까?aaa

감사해요!

답변1

bash 4.0부터 사용할 수 있습니다 shopt -s globstar. 기본적으로 활성화되어 있지 않습니다.

당신의 예를 들어

ls **/aaa/bbb/cat/*     # globstar not enabled

폴더 1/aaa/bbb/cat/1 제공

shopt -s globstar
ls **/aaa/bbb/cat/*     # globstar ENABLED

준다

folder1/aaa/bbb/cat/1  folder2/folder3/folder4/aaa/bbb/cat/3

이것이 tree .당신의 예입니다.

.
├── folder1
│   └── aaa
│       └── bbb
│           ├── cat
│           │   └── 1
│           └── dog
│               └── 1
├── folder2
│   └── folder3
│       └── folder4
│           └── aaa
│               └── bbb
│                   ├── cat
│                   │   └── 3
│                   └── dog
│                       └── 4

물론 고양이 대신 개로도 반복할 수 있습니다. :-)
이전에 with 를 확인 ls하고 이후에 제거하세요 rm. 참고: 해당 구문을 사용하려는 각 새 셸에서
globstar( )를 활성화해야 하며 그렇지 않으면 파일에 넣을 수 있습니다.shopt -s globstar~..bash_rc

답변2

find두 번 실행

find . -path "*/aaa/bbb/cat/*" -delete
find . -path "*/aaa/bbb/dog/*" -delete

아니면

find . \( -path "*/aaa/bbb/cat/*" -o -path "*/aaa/bbb/dog/*" \) -delete

관련 정보