일부 파일 이름에 하이픈이 없는 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
올바른 작업을 수행하는 것 같으면).