LANG/Shell Script

[shell] rm 명령어 특정파일 or 특정확장자 제외하고 모든 파일/디렉터리 지우기

Remove all files/directories except for one file using rm command

Background

  • 파일을 혹은 디렉터리를 생성할때 하나의 파일이나 특정 파일타입을 제외하고 나머지를 지우고 싶은 상황이 잦았다.


How To


POSIX

find . ! -name 'file.txt' -type f -exec rm -f {} +
  • 'file.txt'를 제외한 모든 일반 파일을 삭제한다(숨김파일 포함).
find . ! -name 'file.txt' -type d -exec rm -rf {} +
  • 'file.tex'를 제외한 모든 디렉터리를 삭제한다.
  • 둘다 제거하는 경우도 몇번의 과정을 Text하였다. -type f -o -type d를 해보았지만 작동하지 않았다. 전체적인 삭제는 POSIX보다 아래의 shell에 따라 설정을 거쳐서 지우는 편이 더 편리하다.


Bash

$ shopt -s extglob
$ rm -- !(file.txt)

zsh

$ setopt extenedglob
$ rm -- ^file.txt
  • ^ : use negative pattern
  • extendedglob enable
  • ksh or bash에서도 똑같은 명령어를 사용할 수 있다 (ksh_glob and no_bare_glob_qual enabled)


Ref

'LANG > Shell Script' 카테고리의 다른 글

[Bash] 어렵다.. 링크 저장중.  (0) 2021.01.12