정규 표현식으로 명령 행에서 파일을 삭제하는 방법은 무엇입니까?


18

FOOXX라는 20 개의 파일이 있는데, 여기서 XX는 파일 번호입니다 (예 : 01, 02 등).

현재 숫자 10보다 작은 파일을 모두 삭제하려면 쉽고 간단합니다. 예를 들어 rm FOO0 *

그러나 13-15-15 범위의 특정 파일을 삭제하려면 더 어려워집니다.

rm FPP [13-15]가 작동하지 않아서 모든 파일을 삭제할 것인지 묻습니다. Likewse rm FOO1 [3-5]가 FOO1로 시작하는 모든 파일을 삭제하려고합니다.

그렇다면 이와 같은 파일 범위를 삭제하는 가장 좋은 방법은 무엇입니까?

bash와 zsh를 모두 사용해 보았지만 기본 작업에 대해 크게 다르지 않다고 생각합니까?


"... rm FOO1 [3-5]는 FOO1로 시작하는 모든 파일을 삭제하려고합니다."이것은 의미가 없으며 확실히 여기에 해당되지 않습니다.
이그나시오 바스케스-아 브람스

@Ignacio yeah- 문자 집합이 데이터 정렬 순서를 갖기를 원합니다!
kmarsh

답변:


31

bash에서는 다음을 사용할 수 있습니다.

rm FOO1 {3..5}

또는

rm FOO1 {3,4,5}

FOO13, FOO14 및 FOO15를 삭제합니다.

배쉬 확장 버팀대는 여기 에 문서화되어 있습니다 .


2
또는 심지어 rm FOO{13..15}.
Ignacio Vazquez-Abrams

ZSH에서도 마찬가지입니까?
Jack


@Jack : bash명령은 z셸 명령의 하위 집합을 형성 합니다.
abhinavkulkarni

그래서 정규식과 글 로빙 구문을 모두 배워야 합니다. 부후 :)
Aditya MP

13

향후 독자를 위해이 find명령은 파일을 삭제할 수도 있습니다. 비슷한 문제에 대해이 문제를 해결했습니다.

find . -type f -regex '...' -delete

그러나 선택된 답변은이 질문에 대한 가장 간단한 대답입니다.


선택한 답변은 명명 규칙을 따르는 파일에만 적합합니다. 귀하의 답변 덕분에 디렉토리의 모든 객체 파일을 삭제할 수 있습니다. (제 경우에는 방금 갔고 find . -name "*.o" -delete그것은 매력처럼 작동했습니다)
John Hamilton

6

LS | 그렙 정규식 | xargs rm


6
find -regex ... -print0 | xargs -0 ...이를 위해 사용해야 합니다. 그렇지 않으면 공백이있는 파일 이름에 실패합니다.
추후 공지가있을 때까지 일시 중지되었습니다.

1
물론 사용하려는 경우을 사용할 find수도 있습니다 -exec.
Ignacio Vazquez-Abrams

필자의 경우 파일에 공백이 있었고 구분 기호를 변경하면 공백 문제가 해결됩니다. ls | 그렙 정규식 | xargs --delimiter = '\
n'rm


@evilsoup, 경고를 추가 한 +1, 누가 파일 이름에 새 줄을 삽입합니까?
Iulian Onofrei
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.