다음과 같이 입력하고 싶다고 가정해 보겠습니다.
rm build/* tmp/*
곧 실행하려고 하는데 실행하기 전에 와일드카드를 확장하여 앞으로 무슨 일이 일어날지 확인할 수 있도록 하고 싶습니다. 어떻게 해야 하나요?
제가 찾고 있는 워크플로는 다음과 같습니다.
$ rm build/* tmp/* <press some magic key>
$ rm build/foo build/bar tmp/wiz tmp/buzz
(편집) 또 다른 예시 워크플로우:
$ # Check what is in directory:
$ ls -0
foo1
foo2
bar
$ # I want to delete foo1 and foo2, but want to do so carefully:
$ rm f*o <press some magic key>
$ rm foo1 foo2
다음과 같이 다른 콘텐츠를 확장할 수 있습니다.
cd `hg root` <Ctrl-x>
cd /users/bob/myMercurialRepository
(내 때문에 Control-x shell-expand-line
) ~/.inputrc
.
man bash
globbing에 대한 설명을 살펴봤지만 흥미로운 내용을 찾을 수 없었습니다 .
답변1
어때요?
echo rm build/* tmp/*
또는 내 버전에서는 와일드카드 바로 뒤를 클릭 bash
하면 tabtab일치하는 파일 목록이 제공됩니다.
"파일을 주의해서 삭제"하려면 대화형 플래그를 에 사용하거나 rm
다시 접두사를 붙이는 것이 좋습니다.echo
echo rm -i f*o
rm -i f*o
물론, 어느 쪽도 귀하의 선호도에 따라 목록을 유지하지 않습니다.
답변2
이는 쉘의 편집 모드에 따라 다릅니다. 예를 들어 vi 모드를 사용하고 Esc
and 를 입력하면 *
와일드카드 문자가 확장됩니다.
답변3
실제 동작은 다음과 같습니다(O'Reilly의 "Learning the bash Shell" 참조).
- Esc\일치하는 항목이 여러 개 있으면 가장 긴 공통 접두사가 완성되고, 일치하는 항목이 하나만 있으면 파일/디렉터리/... 이름이 완성됩니다(
/
디렉토리의 경우 a 추가). - Esc*여러 완료가 있는 경우 모든 완료를 나열한다는 점을 제외하면 동작은 유사합니다.
- Esc=얻을 내용을 에코 Esc*하고 변경 사항 없이 입력한 내용을 반환합니다.
예를 들어(직접 시도했습니다) 파일이 포함된 디렉토리가 주어지면
aaabbb aaaccc aaaddd
...$ vi a
Esc\...$ vi aaa•
생성되어 삽입 모드로 전환 됩니다•
....$ vi a
Esc*생성하여...$ vi aaabbb aaaccc aaaddd •
삽입 모드로 전환합니다•
(내가 시도한/
한 디렉토리인 경우 no를 추가합니다)....$ vi a
Esc=echoaaabbb aaaccc aaaddd
하고 당신에게 돌아와서...$ vi a
명령 모드로 들어갑니다.
*
사용중인 정규식의 후행 은 다음과 같습니다 .암묵적으로;당신은 쓸 수 있습니다
rm build/ tmp/
그런 다음 누르세요Esc* 양쪽(예, 제가 알고 노력하는 한, Esc*더 나아가모든 와일드카드 문자는 커서가 위치한 공백으로 구분된 단어에만 나타납니다.).
그러나 와일드카드를 입력하는 경우 마지막 와일드카드는 더 이상 암시적이지 않으므로 명시적으로 제공해야 합니다. 실제로 이라는 이름의 파일이 있는 경우 , , aaazzzwww
에 쓰거나 누르는 것은 에 완료 되지만 !a*w
aaazzzw
a*z*
a*w*
Esc\aaazzzwww
a*z