파일 이름에서 GUID를 제거하는 Bash 쉘 스크립트

파일 이름에서 GUID를 제거하는 Bash 쉘 스크립트

일부 파일 이름에 하이픈이 없는 GUID를 바꾸려고 합니다.

정규식을 완료한 것 같지만 이스케이프 또는 대체 명령이 서로 제대로 작동하지 못하는 것 같습니다.

이것은 내 정규식입니다.

https://regex101.com/r/SiqsjP/1

(-[0-9a-f]{32})

파일 이름은 다음과 같습니다.

iPhone6Plus-learn_multi_child-0dfb2dc71fe20da66ca47190d3136b12.png

나는 이 답변을 보았습니다.파일 이름에서 하위 문자열을 찾아 제거하는 Bash 쉘 스크립트하지만 똑같지는 않아요...

나는 이것이 작동해야 한다고 생각하지만 오류에 대해 불평하지 않을 것입니까?

newname=`echo "$filename" | sed -e 's/\([0-9a-f]{32}\)\.png/\1.png/'`

답변1

존재하다sed 갈아 바수다(기본 정규식) 중괄호도 이스케이프 처리해야 합니다 {}.

newname=`echo "$filename" | sed 's/-[0-9a-f]\{32\}//g'`

파일 이동/이름 바꾸기:

mv "$filename" "$newname"

답변2

셸에서 문자열 작업을 사용합니다.

for name in *.png; do
    # remove everything after the last '-' including the dash
    # and add the '.png' extension back
    newname="${name%-*}.png"
    echo mv "$name" "$newname"
done

이는 이름을 바꾸려는 모든 파일이 .png현재 디렉터리에 있는 파일이라고 가정합니다.

한 번 실행하고 삭제합니다( echo올바른 작업을 수행하는 것 같으면).

관련 정보