"rm -rf filename [co]"명령에서 [co]는 무엇을 의미합니까?


16

두 개의 파일이 있다고 가정 해 보겠습니다 /tmp.

root@ubuntu:~# touch /tmp/hello.{pyc,py}

root@ubuntu:~# ls /tmp/
hello.py  hello.pyc

이제 rm -rf[co] 옵션으로 명령을 실행할 수 있습니다

root@ubuntu:~# rm -rf /tmp/hello.py[co]

root@ubuntu:~# ls /tmp/
hello.py

누군가 여기서 무슨 일이 일어나고 있는지 설명해 주시겠습니까? [co]매개 변수 는 무엇입니까 ? 다른 확장 프로그램에서 어떻게 작동합니까? 내가 가지고 foo.js있고 foo.coffee파일을 말하면 , rm -rf /tmp/foo.coffe[co]삭제하는 것과 같은 일을 할 수 /tmp/foo.js있습니까?


8
-rf디렉토리 ( --recursive) 또는 쓰기 불가능 ( --force) 이 아니기 때문에 필요하지 않습니다 .
deltab

13
필요 -rf가 없으며 루트로 작업을 수행 할 필요가 없습니다. 특히 문제가있는 것들이 관련된 경우 rm -rf.
terdon

여러분, 문제를 설명하기위한 명령 샘플입니다. 실제 질문은 [co]쉘 글로브 에 관한 것이 었습니다 . 감사.
aneeshep

8
@aneeshep 누군가가 총신을 내려다보고 청소하는 방법을 묻는다면, 먼저 총신을 내려다 보거나 청소하는 방법에 대해 경고합니까?
던컨 X 심슨

답변:


34

[co]rm명령에 대한 매개 변수가 아닙니다. 집합의 단일 문자와 동일한 패턴과 일치 하는 셸 글로브 입니다. [co]즉, 파일 이름의 a c또는 a와 일치합니다 o. 보낸 사람 man bash:

[...]  Matches any one of the enclosed characters

모두 일치 foo.coffee하고 foo.js접미사 모두에서 어떤 공통의 문자열을 포함하지 않기 때문에, 가장 좋은 당신은 할 수 foo.*일치합니다 어떤 로 시작하는 파일 이름을 foo.대신 사용할 수 중괄호 확장 예를

rm foo.{coffee,js}

응. 나는 bash;)의 기본 개념을 놓쳤다. 감사합니다 :)
aneeshep

7
패턴 검색 과 같은 [abc]또는 *합니다 파일을 검색 하는 동안 {}하지 않습니다. / tmp에 echo nya[ab]; echo nya{a,b}touch nyaaecho nya[ab]; echo nya{a,b}
가서을

16

매개 변수는 아니지만 문자 모음 (또는 "쉘 글로브")입니다. 이것은 동일합니다 :

rm -rf /tmp/hello.py[co]

와 같다

rm -rf /tmp/hello.pyc
rm -rf /tmp/hello.pyo

비슷한 ...

rm -rf /tmp/hello.py[c-o]

다음 ASCII 순서를 /tmp/hello.pyc포함하여 모든 것을 삭제 /tmp/hello.pyo합니다.

rm -rf /tmp/hello.py[ab][cd]

제거 할 것입니다 ...

rm -rf /tmp/hello.pyac
rm -rf /tmp/hello.pyad
rm -rf /tmp/hello.pybc
rm -rf /tmp/hello.pybd

예를 들어 foo.js 및 foo.coffee 파일이 있습니다 . rm -rf /tmp/foo.coffe[co]를 삭제하는 것과 같은 작업을 수행 할 수 있습니까 /tmp/foo.js?

오히려 멋진 방법을 만들 수는 있지만 그 두 파일의 경우 각 명령마다 하나의 명령으로 제거합니다. 그 두 파일에 최대한 가까이 접근하는 또 다른 예는 ...

rm /tmp/foo.[cj]*

이 같은 파일을 제거합니다 ...

rm /tmp/foo.c*
rm /tmp/foo.j*

따라서이 두 파일보다 훨씬 더 많이 포함됩니다.


2
내가 오해하지 않으면, 당신은 rm -rf모든 경기에서 한 번의 호출을 얻 습니다.

1
예. 하지만 rm의 의도는 아닙니다. 그것들은 단지 동등한 것으로 입력되는 데 필요한 것을 보여주기위한 것입니다. ;-)
Rinzwind

1

와일드 카드 *와 비슷한 쉘 글로브 이며 ?... bash에서 파일 이름 패턴 *.[co].c또는로 끝나는 모든 파일 이름과 일치합니다 .o.

*.[co]vs *.c *.o또는 와의 차이점 은 디렉토리에 파일이 없는 경우 *.{c,o}두 가지 후자의 패턴이 더미로 확장 되지만 버전은 그렇지 않다는 것입니다.*.o.o*.[co]

쉘 글롭은 대소 문자를 구분하지 않는 방식으로 파일 작업을 수행하는 데 유용합니다. 그 끝이 이름을 가진 파일의 무리가있는 경우 예를 들어, jpg, JPG, Jpg, JPg등, ... 그리고 당신이 그들 모두를 제거하려면, 당신은 할 수 있습니다 :

rm *.[Jj][Pp][Gg]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.