bash는 정규식을 사용하여 디렉토리의 파일 이름을 바꿉니다.

bash는 정규식을 사용하여 디렉토리의 파일 이름을 바꿉니다.

현재 디렉토리에서 for 루프를 수행하는 다음 bash 스크립트가 있습니다.

for filename in *-example99.jpg
do
   width=$(identify -format "%w" "$filename")
   myVar="newName$width"
   new=$(echo $filename | sed -e 's/\.jpg$/"$myVar".jpg/')
   echo "$filename" "$new"
   mv "$filename" "$new"
done

실제로 파일 이름을 다음과 같이 바꾸고 싶습니다.

myfilename-example99.jpg

도착하다:

myfilename-newName.jpg

이 목표를 어떻게 달성할 수 있나요?

답변1

sed를 호출할 필요가 없습니다. bash 매개변수 대체를 통해 이 작업을 처리할 수 있습니다. 이 시도:

suffix="-example99.jpg"
for filename in *"$suffix"        # wildcard * must remain unquoted
do
   width=$(identify -format "%w" "$filename")
   new="${filename%$suffix}-newName${width}.jpg"
   echo mv "$filename" "$new"
done

${filename%$suffix}문자열 끝에서 접미사를 제거합니다. 바라보다https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion

답변2

간단하게prename(진주 rename):

myVar="newName"
prename 's/-[^-.]+(\.jpg)$/-'"$myVar"'$1/' *-example99.jpg

관련 정보