파일 이름 내에서 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올바른 일을 하고 있는 것처럼 보이면 제거하십시오.

관련 정보