공통 접두사와 접미사가있는 여러 파일을 어떻게 제거합니까?


21

이름이 많은 파일이 있습니다

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'로 끝나는 파일을 제거하고 싶지만 수천 개의 파일이 있기 때문에 하나씩 제거하고 싶지 않습니다. prefilx 'sequence_1'로 시작하고 '.hmf'로 끝나는 모든 항목을 제거하도록 rm 명령에 어떻게 지정할 수 있습니까?

현재 RedHat Linux 시스템을 사용하고 있지만 다른 배포판에서도이 작업을 수행하는 방법을 알고 싶습니다.

답변:


28
rm sequence_1*.hmf

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


글 로빙은 쉘이 패턴을 가져 와서 해당 패턴과 일치하는 파일 이름 목록으로 확장하는 프로세스입니다. 다른 정규 표현식과 혼동하지 마십시오. 에서 대부분의 시간을 보낸 bash다면 Wooledge Wiki는 globbing (pathname expansion)에 대한 좋은 페이지를 가지고 있습니다. 이식성을 극대화하려면 패턴 일치에 대한 POSIX 사양 을 읽으십시오 .


드물게 "인수 목록이 너무 깁니다" 오류가 발생하면 BashFAQ 95를 살펴보십시오 . 가장 간단한 해결 방법은 오류가 사라질 때까지 glob 패턴을 여러 개의 작은 덩어리로 나누는 것입니다. 귀하의 경우 다음과 같이 접두사 숫자 0에서 9까지 일치를 분할하여 벗어날 수 있습니다.

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

이것은 '인수 목록이 너무 깁니다'오류를 해결하는 매우 영리한 작업입니다. 내 경우에는 2 만 개의 파일이 있으므로 0, .., 20의 for 루프를 사용해야한다고 생각합니다. 권리?
Paul

@Paul 맞습니다.리스트는 필요한만큼 많은 덩어리로 나눕니다. 언젠가는 find접근 방식이 추측하고 확인하는 것보다 쉬워집니다.
jw013

14

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

Dom이 제안한 것처럼이 -delete옵션을 find다음 과 함께 사용할 수도 있습니다 .

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

모두 -maxdepth-delete,하지에있는 동안 POSIX 표준 에 상당히 일반적인 find야생에서 구현. 리눅스 배포판은 일반적으로 GNU를 사용하는데 find,이 옵션은 확실히 이러한 옵션을 지원합니다.


2
가능하면 찾기에 -delete 옵션을 사용하십시오. 각 파일마다 포크되지 않습니다.
Dom

건배. -delete최신 GNU BSD 시스템에서 지원되는 것처럼 보이지만 -print0GNU 전용입니다. 따라서 더 휴대하기 쉬울 것입니다 (OP에는 차이가 없어야 함).
쓸모없는

최소한 OS X의 찾기에는 -print0이 있지만 POSIX에는 포함되어 있지 않습니다.
Lri

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

Bash에서도 작동합니다.


괄호 확장에는을 필요 bash로하며 제로 패딩 양식에는 버전 4가 필요합니다.
jw013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.