Linux: 파일*을 삭제하지만 file1 및 file2는 삭제하지 않음

Linux: 파일*을 삭제하지만 file1 및 file2는 삭제하지 않음

보통 나는 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 {} +

일반 파일만 필터링하므로 와일드카드를 사용하는 것과는 다릅니다.

관련 정보