내 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...
위에 표시된 대로 cat
및 dog
서버 의 모든 인스턴스 내의 모든 파일을 삭제하려면 어떤 명령을 사용할 수 있습니까 ? 단, 해당 파일이 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