공통 접두사와 접미사가있는 여러 파일을 어떻게 제거합니까? 있습니다 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_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 시스템을 사용하고 있지만 다른 배포판에서도이 작업을 수행하는 방법을 알고 싶습니다.



답변

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

답변

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,이 옵션은 확실히 이러한 옵션을 지원합니다.


답변

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

Bash에서도 작동합니다.