그래서 작업을 시작하기 전에 디렉토리를 정리하고 싶습니다. 제가 좀 이렇게 생겼네요.
./static
├── css
│ └── styles
├── img
│ └── pictures
└── js
└── scripts
나는 rm
의 내용을 원하지만 원하지 않습니다.css
js
img
두 가지 경로를 모두 넣을 수 있다는 것을 알고 있지만 그게 귀찮아서 이 방법을 시도했지만 성공하지 못했습니다.
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 {}/* \:
'가 {}
발견된 디렉터리 이름으로 바뀌고 명령이 실행됩니다.