보통 나는 bash에서 이것을 한다
shopt -s extglob
rm !(filedontwantremove)
filedontwantantremove를 제외한 모든 파일을 삭제합니다.
하지만 filedontwantwantremove 및 "전체 다른 이름을 가진 다른 파일"을 제외한 모든 파일을 삭제하려면 어떻게 해야 합니까?
해결책을 찾았지만 rm !()과 같은 것을 선호합니다.
답변1
그냥 사용:
shopt -s extglob
rm !(filedontwantremove|antotherfilewithatotaldifferentname)
그러나 extglob은 일반적으로 bash의 대화형 셸에서 기본적으로 켜져 있습니다.
활성 상태인지 확인하려면 다음을 수행하십시오.
$ shopt -p extglob
shopt -s extglob ### The -s means that it is set.
!(pattern-list)
그리고 이 명령을 실행하여 설명서에서 해당 관용구를 설명하는 섹션을 찾으세요 .
$ LESS=+/'If the extglob shell option is enabled' man bash
...ㅏ패턴 목록|로 구분된 하나 이상의 패턴 목록입니다.
답변2
예, 해결책이 find
있으며 POSIX 방식입니다.
find . ! -name . -prune -type f ! -name 'file[12]' -exec rm {} +
일반 파일만 필터링하므로 와일드카드를 사용하는 것과는 다릅니다.