하위폴더삭제중 2개를 제외하고 삭제하려면 어떻게 해야하나요 ?
글쓴이: xoduddk123 / 작성시간: 월, 2014/06/02 - 8:58오전
rm -rf `ls | find /root/aaa/* -name ABC -prune -o -print`
위와같이 /root/aaa/ 의 하위 파일들중 ABC라는 폴더를 제외하고는 전부다 삭제하는 쉘스크립트는 사용하고있습니다.
그런데 여기에 ABC라는 폴더와 123이라는 폴더 2개를 남겨두고 삭제하고싶다면
저 위의 스크립트 중에 어떻게 추가시켜야 해당하는 작업을 할수있나요??? 엉청 간단할거같은데. . . .
Forums:
find . | grep -v 'ABC$' |
find . | grep -v 'ABC$' | xargs rm -rf ( 테스트서버에서 테스트 해봄 ksh )
의미는 다 아시겠지만 혹시나 해서
grep -v // 인자값을 제외하고
'ABC$' // 끝이 ABC 인 것. 필드의 끝을 의미.
drwxr-xr-x 5 bin bin 4096 Jun 15 15:29 ..
drwxr-xr-x 2 root system 256 Jun 15 17:51 ABC
다른 예로 ^d 라 함은 필드의 앞이 d인것 ( 디렉터리 )
이런 제 생각일뿐.. 꼭 테스트 거치시길.. ( 제가 해보긴 했어도 꼭.. )
xargs 앞에 인자를 받아 처리함.
xargs rm -rf // 앞의 결과값을 받아 전부다 삭제.
결론. ABC인 ( 파일이든 디렉이든.. , 구별을 안해놧기 떄문에 ) 것을 빼고
나머지 파일 및 디렉 전부다 삭제.
테스트 내용
find . | grep -v 'ABC$' | xargs ls
./ABC/ABCD ./er/45 ./gb/cv ./qwe/dsa ./zxc/sod ./zzzz
.:
ABC as asd er gb qwe zxc zzzz
./as:
./asd:
./er:
45
./gb:
cv
./qwe:
dsa
./zxc:
sod
#
# find . | grep -v 'ABC$' | xargs rm -rf
rm: cannot remove '.' or '..'
# ls -latr
total 8
drwxr-xr-x 5 bin bin 4096 Jun 15 15:29 ..
drwxr-xr-x 2 root system 256 Jun 15 17:51 ABC
drwxr-xr-x 3 user1 staff 256 Jun 15 17:51 .
# ls -la R
R not found
# ls -laR
total 8
drwxr-xr-x 3 user1 staff 256 Jun 15 17:51 .
drwxr-xr-x 5 bin bin 4096 Jun 15 15:29 ..
drwxr-xr-x 2 root system 256 Jun 15 17:51 ABC
./ABC:
total 0
drwxr-xr-x 2 root system 256 Jun 15 17:51 .
drwxr-xr-x 3 user1 staff 256 Jun 15 17:51 ..
#
질문자님 죄송..ㅜㅠ
게시글을 완전히 이해하지 못하고 글을 적었네요 ...ㅜㅠㅜㅠ
관련 없이 글을 적어버려 삭제하고 싶은데 편집기능에서 삭제방법을 몰라서
따로 이렇게 글을 올립니다 .ㅜ
(1) 2개의 하위 폴더를 적절한 곳으로
(1) 2개의 하위 폴더를 적절한 곳으로 옮깁니다.(mv 명령 사용) 하위 폴더의 상위 경로를 적절한 곳에 기록합니다.
(2) 디렉토리 전체를 삭제합니다.
(3) 하위 폴더의 상위 경로를 생성하고(mkdir -p 사용), 2개의 하위 폴더를 복구 시킵니다.(mv 명령 사용)
내 블로그: http://unipro.tistory.com
원하는 답변은 rm -rf `ls | find
원하는 답변은
rm -rf `ls | find /root/aaa/* -name ABC -prune -o -name DEF -prune -o -print`
일 테지만, 조건에 맞는 파일이 많을 경우, rm이 실패할 겁니다. 차라리,find /root/aaa -name ABC -prune -o -name DEF -prune -o -delete
또는find /root/aaa -name ABC -prune -o -name DEF -prune -o -exec rm {} \;
가 낫습니다.C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기