공통 접두사와 접미사가 있는 여러 파일을 삭제하는 방법은 무엇입니까?

공통 접두사와 접미사가 있는 여러 파일을 삭제하는 방법은 무엇입니까?

내 이름은 여러개야

sequence_1_0001.jpg  
sequence_1_0002.jpg  
sequence_1_0003.jpg  
...

및 파일 이름

sequence_1_0001.hmf  
sequence_1_0002.hmf  
sequence_1_0003.hmf  
...

및 파일 이름

sequence_2_0001.jpg  
sequence_2_0002.jpg  
sequence_2_0003.jpg  
...

그리고

sequence_2_0001.hmf  
sequence_2_0002.hmf  
sequence_2_0003.hmf  
...

"sequence_1"로 시작하고 ".hmf"로 끝나는 파일만 삭제하고 싶지만 수천 개의 파일이 있기 때문에 하나씩 삭제하고 싶지 않습니다. 접두사 "sequence_1"로 시작하고 ".hmf"로 끝나는 모든 항목을 제거하려는 rm 명령을 어떻게 지정합니까?

저는 현재 RedHat Linux 시스템을 사용하고 있는데 다른 배포판에서도 어떻게 사용하는지 알고 싶습니다.

답변1

rm sequence_1*.hmf

sequence_1로 시작하고 끝나는 파일을 삭제합니다 .hmf.


와일드카드는 쉘이 패턴을 가져와 패턴과 일치하는 파일 이름 목록으로 확장하는 프로세스입니다. 정규식과 혼동하지 마십시오. 정규식은 다릅니다. 대부분의 시간을 보낸다면 bashWooledge Wiki에 좋은 정보가 있습니다.와일드카드 페이지(경로 이름 확장). 최대의 이식성을 원한다면 읽어야 합니다.패턴 일치를 위한 POSIX 사양그리고/대신에.


혹시라도 마주치게 되는 경우에는"매개변수 목록이 너무 깁니다"오류가 발생했습니다. 확인해 보세요.배쉬 FAQ 95,이 문제를 해결했습니다. 가장 간단한 해결책은 오류가 사라질 때까지 전역 패턴을 여러 개의 작은 덩어리로 나누는 것입니다. 귀하의 경우 다음과 같이 숫자 0에서 9를 접두사로 사용하여 일치 항목을 분할할 수 있습니다.

for c in {0..9}; do rm sequence_1_"$c"*.hmf; done
rm sequence_1*.hmf  # catch-all case

답변2

jw013의 대답은 정확하지만 수천 개의 일치 항목이 있으면 명령이 실패할 수 있습니다. 즉, rm sequence_1_0001.hmf sequence_1_0002.hmf ...셸에서 생성된 확장된 명령줄이 너무 클 수 있습니다.

-deleteDom이 제안한 대로 다음 옵션을 사용할 수도 있습니다 find.

find . -maxdepth 1 -type f -name 'sequence_1*.hmf' -delete

-maxdepth-delete에는 없지만 둘 다POSIX 표준find야생 구현에서는 매우 일반적입니다. Linux 배포판은 일반적으로 find이러한 옵션을 확실히 지원하는 GNU를 사용합니다.

답변3

rm sequence_1_{0000..0999}.hmf
rm sequence_1_{1000..1999}.hmf
rm sequence_1_{2000..2999}.hmf
...

Bash에서도 작동합니다.

관련 정보