하나의 디렉토리를 제외한 모든 파일 찾기

하나의 디렉토리를 제외한 모든 파일 찾기

그래서 작업을 시작하기 전에 디렉토리를 정리하고 싶습니다. 제가 좀 이렇게 생겼네요.

./static
├── css
│   └── styles
├── img
│   └── pictures
└── js
    └── scripts

나는 rm의 내용을 원하지만 원하지 않습니다.cssjsimg

두 가지 경로를 모두 넣을 수 있다는 것을 알고 있지만 그게 귀찮아서 이 방법을 시도했지만 성공하지 못했습니다.

rm -r ./static/{css,js}/*

rm: './static/{css,js}/*'을(를) 삭제할 수 없습니다. 해당 파일이나 디렉터리가 없습니다.

이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

답변1

*귀하의 명령은 파일 로 처리됩니다 . 시도해보십시오.rm -rf ./static/{css,js}/

대안으로 Bash는확장된 와일드카드(먼저 테스트한 후 삭제 echo):

$ shopt -s extglob
$ cd static
$ echo rm -rf !(img)

또는 짧은 답변

ls | grep -v "img" | xargs rm -rf

의견에서 OP가 제안한 대로 이 단계에 따라 작업을 완료하세요. 먼저 파일을 인쇄하여 테스트 실행을 수행하여 필요한 항목을 얻었는지 확인하세요.

$ find . -path ./img -prune -o -type f
./css/styles
./img
./js/scripts

확인 후 삭제하세요.

$ find . -path ./img -prune -o -type f -exec rm {} \;

$ static/
  ├── css
  ├── img
  │   └── pictures
  └── js

답변2

find좀 길지만 구체적으로 말하고 싶을 때 항상 좋아해요 . 이렇게 하면 구조가 보존되고 img 디렉터리가 무시됩니다.

find ./static -type d ! -name 'img' -exec rm -f {}/* \;

무슨 일이 일어나고 있는지 분석

find주문하다

./static검색 위치 지정

type -d디렉토리 선택

! -name 'img'img 디렉토리 무시

-exec rm -f {}/* \:'가 {}발견된 디렉터리 이름으로 바뀌고 명령이 실행됩니다.

관련 정보