전체 경로를 다시 입력하지 않고 디렉터리의 여러 파일을 참조하는 방법이 있습니까? [복사]

전체 경로를 다시 입력하지 않고 디렉터리의 여러 파일을 참조하는 방법이 있습니까? [복사]

Bash 셸에서 동일한 디렉터리에 있는 여러 파일을 삭제해야 하는 경우 현재 다음을 수행해야 합니다.

rm /some/path/file1 /some/path/file2

/some/path/변수를 사용하거나 작업 디렉토리를 변경하지 않고 다시 입력할 필요가 없도록 이것을 작성하는 더 짧은 방법이 있습니까 ?

어쩌면 다음과 같을 수도 있습니다:

rm /some/path/(file1,file2)

답변1

거의 완료되었습니다:

rm /some/path/{file1,file2}

심지어

rm /some/path/file{1,2}

다른 쉘과 관련되고 지원되는 모드는 다음과 같습니다.

rm /some/path/file[12]

처음 두 개는 두 개의 명시적 파일 이름 인수로 확장됩니다. 세 번째는 /some/path모든 파일과 일치하는 패턴입니다.

답변2

또는 Bash의 Readline 라이브러리를 활용할 수도 있습니다. 이는 해결 방법이지만 비교적 입력하기 쉽습니다.

  1. ls /some/path/
  2. rm ESC.file1 ESC.file2

(메타 접두사가 ESC키라고 가정합니다.)

첫 번째 명령의 extra는 ls기록의 경로를 이전 명령의 마지막 인수로 사용합니다 ESC.(또는 설명서에 따르면 M-.또는 심지어 M-_).

이전 명령에 마지막 인수(이전 기록 항목의 마지막 단어)를 삽입합니다.

따라서 실제로 파일 이름 앞의 마지막 경로를 입력하는 것입니다. (참고하세요후행 슬래시ls).

답변3

이러한 통찰력 있는 답변 외에도 파일 그룹을 일치시키는 데 사용할 수 있는 몇 가지 패턴이 있습니다. 그리고파일 이름 확장자그리고패턴 매칭, bash에게 디렉토리의 모든 파일, 어떤 것으로 시작하는 모든 파일, 동일한 확장자를 가진 모든 파일 등과 일치하도록 지시할 수 있습니다.

물론, rm을 사용한다면 원하지 않는 것을 삭제하지 않도록 각별히 주의해야 합니다. 경로 매개변수가 표시할 내용을 나열하려면 먼저 ls를 사용하는 것이 좋습니다.

다음은 몇 가지 예입니다.

  1. 디렉터리의 모든 파일을 일치시키려는 경우 rm명령이 처리할 내용을 확인하려면 ls별표( *) 전역 연산자를 사용하여 원하는 수의 문자를 일치시킬 수 있습니다.

    ls /some/path/*
    
  2. 아니면 test로 시작하는 모든 파일일 수도 있습니다.

    ls /some/path/test*`
    
  3. 모두 test로 시작하고 문자 하나와 .sh물음표( ?) 문자를 사용하여 문자를 일치시킬 수 있습니다.

    ls /some/path/test?.sh
    
  4. max 등 9개의 파일 test1.sh이 있고 이러한 테스트 스크립트를 삭제하려고 한다고 가정해 보겠습니다 . 당신도 간직하고 싶은 것이 있습니다. test로 시작하는 문자, 1부터 9까지의 숫자 또는 로 시작하는 알파벳이 아닌 문자를 검색할 수 있습니다 . 문자 그룹을 일치시키기 위해 대괄호( )를 사용합니다 .test2.shtest9.shtesta.sh.sh[]

    ls /some/path/test[1-9].sh
    ls /some/path/test[!:alpha:].sh
    

이와 같은 일치 항목은 상당히 간단하게 스크립팅할 수 있으므로 자동화를 위해 스크립트 내에서 파일을 매우 미세하게 조정하거나 광범위하게 그룹화할 수 있습니다.

답변4

Bash를 사용하는 경우 M-r다음 줄을 추가하여 마지막 매개변수를 반복 할 수 있습니다 ~/.inputrc.

"\er": "!#:$\e^"

!#는 현재 행이고, $는 마지막 매개변수 \e^입니다 history-expand-line.

관련 정보