명령을 실행하기 전에 명령에서 와일드카드 문자를 확장하세요.

명령을 실행하기 전에 명령에서 와일드카드 문자를 확장하세요.

다음과 같이 입력하고 싶다고 가정해 보겠습니다.

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 bashglobbing에 대한 설명을 살펴봤지만 흥미로운 내용을 찾을 수 없었습니다 .

답변1

어때요?

echo rm build/* tmp/*

또는 내 버전에서는 와일드카드 바로 뒤를 클릭 bash하면 tabtab일치하는 파일 목록이 제공됩니다.

"파일을 주의해서 삭제"하려면 대화형 플래그를 에 사용하거나 rm다시 접두사를 붙이는 것이 좋습니다.echo

echo rm -i f*o
rm -i f*o

물론, 어느 쪽도 귀하의 선호도에 따라 목록을 유지하지 않습니다.

답변2

이는 쉘의 편집 모드에 따라 다릅니다. 예를 들어 vi 모드를 사용하고 Escand 를 입력하면 *와일드카드 문자가 확장됩니다.

답변3

실제 동작은 다음과 같습니다(O'Reilly의 "Learning the bash Shell" 참조).

  1. Esc\일치하는 항목이 여러 개 있으면 가장 긴 공통 접두사가 완성되고, 일치하는 항목이 하나만 있으면 파일/디렉터리/... 이름이 완성됩니다( /디렉토리의 경우 a 추가).
  2. Esc*여러 완료가 있는 경우 모든 완료를 나열한다는 점을 제외하면 동작은 유사합니다.
  3. Esc=얻을 내용을 에코 Esc*하고 변경 사항 없이 입력한 내용을 반환합니다.

예를 들어(직접 시도했습니다) 파일이 포함된 디렉토리가 주어지면

aaabbb  aaaccc  aaaddd
  1. ...$ vi aEsc\...$ vi aaa•생성되어 삽입 모드로 전환 됩니다 .
  2. ...$ vi aEsc*생성하여 ...$ vi aaabbb aaaccc aaaddd •삽입 모드로 전환합니다 (내가 시도한 /한 디렉토리인 경우 no를 추가합니다).
  3. ...$ vi aEsc=echo aaabbb aaaccc aaaddd하고 당신에게 돌아와서 ...$ vi a명령 모드로 들어갑니다.

*사용중인 정규식의 후행 은 다음과 같습니다 .암묵적으로;당신은 쓸 수 있습니다

rm build/ tmp/

그런 다음 누르세요Esc* 양쪽(예, 제가 알고 노력하는 한, Esc*더 나아가모든 와일드카드 문자는 커서가 위치한 공백으로 구분된 단어에만 나타납니다.).

그러나 와일드카드를 입력하는 경우 마지막 와일드카드는 더 이상 암시적이지 않으므로 명시적으로 제공해야 합니다. 실제로 이라는 이름의 파일이 있는 경우 , , aaazzzwww에 쓰거나 누르는 것은 에 완료 되지만 !a*waaazzzwa*z*a*w*Esc\aaazzzwwwa*z

관련 정보