2011-09-22 3 views
6

invers bash v4 셸 확장을 처리 할 수있는 방법이 있습니까? 모든 파일을 와일드 카드처럼 다루지 않습니까? 나는 rm이 경우 형식 'Folder-???' 아닌 모든 파일이 필요가 있는지 궁금 해서요 짧은 (예. 내장) 방식으로 다음bash : 반전 (즉, NOT) 쉘 와일드 카드 확장?

for file in * 
do 
    [[ $i =~ \Folder-...\ ]] && rm '$i' 
done 

루프를하고.

+0

당신이 할 수 없어 두려워하고 있습니다 대신 정규식을 사용하십시오. – TMS

+0

가능한 복제본 [어떻게 유닉스/리눅스 셸에서 패턴 매칭을 할 때 inverse 또는 negative 와일드 카드를 사용할 수 있습니까?] (http://stackoverflow.com/questions/216995/how-can-i-use-inverse-or-negative -wildcards-when-unix-linu와 일치하는 패턴) – Johan

+1

@Tomas false; extglob은 되돌릴 수 있습니다. –

답변

14
shopt -s extglob 
rm -- !(Folder-???) 
+0

+1 : 그 사실을 몰랐습니다. –

3

@Dimitre이 떠들썩한 파티를위한 right answer을 가지고 ... 그냥 bash는 학습 호기심

(예는 ... BTW, 작동하지 않습니다).

for file in *; do 
    case "$file" in 
    Folder-???) : ;; 
    *) do stuff here ;; 
    esac 
done 

다른 배시 용액하면 'find 반전 가능하면 find으로 확인되어 경우 [[ ... ]] (documentation)

for file in *; do 
    if [[ "$file" != Folder-??? ]]; then 
    do stuff here 
    fi 
done 
+0

안녕하세요 @ 글렌,'case [...] '및'[[...]] 내부에 _varname_ 형식으로 쉘 단어/필드 분할을 수행하지 않으므로 식별자를 추가 할 필요가 없습니다. (물론이 맥락에서의 인용은 해롭지 않습니다.) –

2

안에 패턴 매칭 연산자를 사용하는 것이다 : 휴대용 용액 case 사용하는 s의 술어는 -not입니다.

find -not -name 'Folder-???' -delete 

에서와 마찬가지로

(이 글로브 매칭 쉘 다른 차이들 사이에서 반복적으로 일치주의,하지만 난 당신이 충분히 find을 알고 있다고 가정)