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
orbash
에서도 똑같은 명령어를 사용할 수 있다 (ksh_glob
andno_bare_glob_qual
enabled)
Ref
'LANG > Shell Script' 카테고리의 다른 글
[Bash] 어렵다.. 링크 저장중. (0) | 2021.01.12 |
---|