여러 파일의 이름을 바꾸는 방법

여러 파일의 이름을 바꾸는 방법

중복 가능성:
정규식을 사용하여 많은 수의 파일 이름을 바꾸는 방법은 무엇입니까?

나한테 전화한 게 있어

abc-10.5.3.1-1.x86_64.rpm
abc-compiler-10.5.3.1-1.x86_64.rpm
abc-10.5.3.1-6.x86_64.rpm   
abc-compiler-10.5.3.1-6.x86_64.rpm

파일을 빌드할 때 부 버전 번호(1-1 및 1-6)를 제거하고 싶습니다. Redhat Linux에서 rename 명령을 사용하여 이를 달성하는 방법을 모르겠습니다. 생성된 파일 이름은 다음과 같아야 합니다.

abc-10.5.3.x86_64.rpm

이 명령은 정규식을 사용하지 않습니다.

답변1

zsh 사용에 대한 대안을 고려하고 싶다면 다음 rename과 같이 작성하겠습니다.

autoload -U zmv
zmv -n '(*).<->-<->(.[^.]##.rpm)' '$1$2'

(행복하면 삭제 -n).

답변2

당신 rename(1)이 이렇다면이 페도라 모자당신이 하고 싶은 일이 효과가 없을 것 같아요.

다음이 필요한 방법이 있습니다 bash.

( shopt -s extglob
for f in ./*-+([.[:digit:]])-+([[:digit:]]).x86_64.rpm; do
    mv -v -- "$f" "${f%-+([[:digit:]]).x86_64.rpm)}.x86_64.rpm"
done )

+([.[:digit:]])부분은 메이저/마이너 버전 번호를 일치시키는 데 사용되고, +([[:digit:]])다음 부분 -은 삭제하려는 패치 번호를 일치시키는 데 사용됩니다.

POSIX를 사용하면 덜 정확한 작업을 수행할 수도 있습니다 sh.extglob

for f in ./*-*-*.x86_64.rpm; do
    mv -v -- "$f" "${f%-*.x86_64.rpm}.x86_64.rpm"
done

관련 정보