rm -rf Linux에서는 숫자를 처리할 수 없나요?

rm -rf Linux에서는 숫자를 처리할 수 없나요?

이것은 다음 폴더가 포함된 현재 디렉터리입니다.

rpea-vd1-430: ls
rev10  rev11  rev12  rev2  rev3  rev4  rev5  rev6  rev7  rev8  rev9  Synthesis.config  Synthesis.html

다음 Linux 명령을 사용하여 폴더를 삭제했습니다.

 rm -rf rev[1-11]

하지만 내가 주면 내 명령은 실패합니다

rm -rf rev[1-9] 

rev1에서 rev9까지 명명된 디렉토리를 제거하기 때문에 두 자리 숫자를 고려하지 않으시겠습니까?

예상 출력:

rev11  Synthesis.config  Synthesis.html

답변1

중괄호 확장은 숫자가 아닙니다.

  • rev[1-9][1-9]모두와 함께 확장됩니다특징1에서 9 사이
  • rev[2468]으로 확장될 예정입니다.rev2 rev4 rev6 rev8
  • rev[A-Z]다음으로 확장됩니다 revA revB ... revZ(파일이 존재한다고 가정).
  • rev[1-11]또한 1에서 1 사이의 모든 문자로 확장됩니다.
  • rev[1-15]문자 5뿐만 아니라 1과 1 사이의 모든 문자로 확장되므로 rev[15], 일치 rev1rev5

답변2

rm -rf rev[1-9]두 자리 숫자를 고려하지 않습니까?

왜 이렇게 되어야 할까요? 숫자를 하나만 지정했습니다. 대괄호 표현식은 [..]정확히 하나의 문자와 일치하며, 이는 대괄호 안에 나열된 문자 중 하나여야 합니다. 따라서 일부 숫자가 있는 rev[1-9]형식의 파일 이름을 일치시키십시오 ( 제외 ). 다시 말하지만, 여러 번 지정되더라도 대괄호 안에 지정된 유일한 문자이므로 정확히 일치합니다 . 또는 와 동일합니다 . 다시 말하지만 와 동일합니다 .revNN0rev[1-11]rev11rev[1]rev1rev[1-12]rev[12]

rev[0-9]*을 사용하여 시작하는 모든 rev파일 이름, 숫자, 그 다음 무엇이든 일치시키거나 다음을 사용할 수 있습니다.확장된 글로벌Bash 및 ksh에서 rev+([0-9]).subexpression은 정규 표현식과 유사하게 +(...)괄호로 묶인 패턴과 한 번 이상 일치합니다 .(...)+

{a..b}반면 중괄호 확장은 파일 이름을 일치시키는 대신 문자열을 생성하므로 rev{1..12}generate rev1, rev2, ... 를 사용할 수 있습니다 rev12. 이는 파일이 존재하는지 여부를 고려하지 않으므로 파일도 생성되지만 rev1귀하의 예에서는 그렇지 않습니다.


편집에서 ?를 제외하고 rm일치하는 모든 파일을 일치시키고 싶습니까 ? 가장 쉬운 방법은 아마도 예외의 이름을 일시적으로 바꾸는 것입니다( 존재하지 않는다고 가정).rev*rev11arev11

$ mv rev11 arev11
$ rm -r rev*
$ mv arev11 rev11

버팀대 확장을 사용할 수 있습니다.

$ rm -r rev{{1..10},12}

(상한값을 너무 높게 설정하면 존재하지 않는 이름이라는 오류가 발생합니다.)

11이 아닌 숫자와 일치하는 glob을 만드는 것은 다음과 같이 다소 까다롭지만 먼저 다시 확인하는 것이 가장 좋습니다.

$ echo rm -r rev[0-9] rev1[02-9] rev[2-9][0-9]

답변3

중괄호를 사용해야하며 다음을 수행해야합니다 ...

rm -rf rev{1..11}

echo rev[1-11]의 차이점을 확인하세요 echo rev{1..11}.

관련 정보