지정 한 파일 이외 의 모든 파일 삭제

3302 단어 linuxshell
Liux 환경 에서 일 하 는 사람 에 게 는 디 렉 터 리 에 있 는 파일 을 만 들 거나 파일 을 삭제 하거나 링크 파일 을 복사 하 는 등 디 렉 터 리 에 있 는 파일 을 자주 조작 해 야 합 니 다.현재 필요 한 것 은 bash 셸 을 통 해 특정 디 렉 터 리 에 있 는 파일 이름 을 제외 하고. gz 또는. zip 를 포함 하 는 모든 파일 을 삭제 하 는 방법 입 니까?우리 가 평소에 가장 많이 하 는 파일 삭제 작업 은 특정 모드 의 파일 을 삭제 하 는 것 입 니 다. rm 명령 을 사용 하고 Liux 의 다음 세 개의 마스크 를 추가 하 는 것 입 니 다. *,?[..]. 그 중: * – 임의의 문자 와 일치 합 니 다.? -임의의 단일 문자 일치 하기;[...] - 임의의 괄호 에 있 는 문자 와 일치 합 니 다.
  • 방법 1: shopt 확장 모드 를 사용 하여 일치 합 니 다. 이전에 shopt 명령 을 사용 한 적 이 있다 면 shopt 과 set 명령 이 유사 하 다 는 것 을 알 고 셸 의 환경 을 맞 출 수 있 습 니 다.다음은 아래 의 shopt 명령 을 통 해 셸 의 패턴 일치 기능 을 확장 합 니 다. 그러면 위의 세 개의 마스크 기능 이 확장 되 고 새로운 메타 문 자 를 도입 합 니 다.그 후에 우 리 는 특정한 파일 을 제외 한 모든 파일 을 삭제 할 수 있 습 니 다. 다음은 구체 적 인 예 입 니 다.
  • [root@devops work]# shopt -s extglob`
    [root@devops work]# ls
    aa aa.tar.gz bb cc
    [root@devops work]# rm -rf !(aa.tar.gz)
    -bash: !: event not found
    [root@devops work]# shopt -s extglob
    [root@devops work]# rm -rf !(*.gz)
    [root@devops work]# ls
    aa.tar.gz

    파일 을 삭제 한 후 다음 명령 으로 extglob 옵션 을 끌 수 있 습 니 다.
    [root@devops work]# shopt -u extglob

    하위 셸 에서 실행 하 는 것 을 추천 합 니 다. 현재 셸 에 영향 을 주지 않 습 니 다.
     [root@devops work]# (shopt -s extglob; rm -rf !(filename))
  • 방법 2: grep 와 rm 명령 을 결합 하여 특정 파일 을 제외 한 모든 파일 을 삭제 할 수 있 습 니 다. grep 명령 특유 의 옵션 "- v"를 사용 하여 특정 파일 을 제외 한 모든 파일 을 찾 은 다음 rm 명령 을 통 해 삭제 할 수 있 습 니 다. 다음 예 를 들 어
  • [root@devops work]# ls
    aa aa.tar.gz bb cc
    [root@devops work]# ls | grep -v '.gz' | xargs rm -rf
    [root@devops work]# ls
    aa.tar.gz

    혹은
    rm `ls | grep -v '.gz' `
  • 방법 3: find 명령 을 통 해 특정 파일 을 제외 한 모든 파일 을 삭제 하고 find 를 사용 한 사람 은 모두 알 고 있 을 것 입 니 다. find 명령 의 기능 이 상당히 강하 고 옵션 이 많 습 니 다.우 리 는 아래 의 명령 을 사용 하여 이 수 요 를 실현 할 수 있다.
  • [root@devops work]# ls
    aa aa.tar.gz bb cc
    [root@devops work]# find ./ -type f -not -name '*.gz' -delete
    [root@devops work]# ls
    aa.tar.gz
    [root@devops work]#

    원본 링크:http://www.osetc.com/archives/506.html

    좋은 웹페이지 즐겨찾기