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 라이브러리를 활용할 수도 있습니다. 이는 해결 방법이지만 비교적 입력하기 쉽습니다.
ls /some/path/
rm
ESC.file1
ESC.file2
(메타 접두사가 ESC키라고 가정합니다.)
첫 번째 명령의 extra는 ls
기록의 경로를 이전 명령의 마지막 인수로 사용합니다 ESC.(또는 설명서에 따르면 M-.
또는 심지어 M-_
).
이전 명령에 마지막 인수(이전 기록 항목의 마지막 단어)를 삽입합니다.
따라서 실제로 파일 이름 앞의 마지막 경로를 입력하는 것입니다. (참고하세요후행 슬래시행 ls
).
답변3
이러한 통찰력 있는 답변 외에도 파일 그룹을 일치시키는 데 사용할 수 있는 몇 가지 패턴이 있습니다. 그리고파일 이름 확장자그리고패턴 매칭, bash에게 디렉토리의 모든 파일, 어떤 것으로 시작하는 모든 파일, 동일한 확장자를 가진 모든 파일 등과 일치하도록 지시할 수 있습니다.
물론, rm을 사용한다면 원하지 않는 것을 삭제하지 않도록 각별히 주의해야 합니다. 경로 매개변수가 표시할 내용을 나열하려면 먼저 ls를 사용하는 것이 좋습니다.
다음은 몇 가지 예입니다.
디렉터리의 모든 파일을 일치시키려는 경우
rm
명령이 처리할 내용을 확인하려면ls
별표(*
) 전역 연산자를 사용하여 원하는 수의 문자를 일치시킬 수 있습니다.ls /some/path/*
아니면 test로 시작하는 모든 파일일 수도 있습니다.
ls /some/path/test*`
모두 test로 시작하고 문자 하나와
.sh
물음표(?
) 문자를 사용하여 문자를 일치시킬 수 있습니다.ls /some/path/test?.sh
max 등 9개의 파일
test1.sh
이 있고 이러한 테스트 스크립트를 삭제하려고 한다고 가정해 보겠습니다 . 당신도 간직하고 싶은 것이 있습니다. test로 시작하는 문자, 1부터 9까지의 숫자 또는 로 시작하는 알파벳이 아닌 문자를 검색할 수 있습니다 . 문자 그룹을 일치시키기 위해 대괄호( )를 사용합니다 .test2.sh
test9.sh
testa.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
.