Bash에 반영하려는 이미지 파일이 포함된 디렉터리가 있습니다. 에코하는 동안 파일 이름과 확장자를 한 줄 명령으로 바꾸고 싶습니다.
예시 파일:
images/file_name_1.jpg
images/file_name_2.jpg
일반적으로 다음과 같이 단일 교체를 수행할 수 있습니다.
for i in images/*; do echo ${i/file/image}; done
출력은 다음과 같습니다:
images/image_name_1.jpg
images/image_name_2.jpg
for 루프에 유지하고 "jpg" 문자열도 "png"로 바꾸려면 어떻게 해야 합니까? 이것은 단지 예일 뿐이며 점을 쉼표 등으로 바꿀 수 있습니다.
내가 이것을 시도하면 :
for i in images/*; do echo ${{i/jpg/png}/file/image}; done
이것은 작동하지 않습니다. 다른 해결책이나 아이디어를 찾을 수 없습니다. 가능합니까? 그렇다면 어떻게?
답변1
쉬운 방법은 결과를 변수에 할당한 다음 해당 변수를 사용하는 것입니다. 예:
for filename in images/*
do
echo "filename is now $filename"
filename=${filename/jpg/png}; echo "filename is now $filename"
filename=${filename/file/image}; echo "filename is now $filename"
echo "final filename is ${filename}"
done
답변2
이전 대체를 변수에 할당한 다음 해당 변수에 대해 대체를 실행할 수 있습니다.
for i in images/*
do
j=${i/jpg/png}
echo ${j/file/image}
done
답변3
변화임의의 문자열:
$ echo "images/file_name_1.jpg" | perl -pE 's/file/image/;s/jpg$/png/;'
images/image_name_1.png
이름이 바뀐 단축키(최종 목표일 수 있음:
$ rename 's/file/image/;s/jpg$/png/;' "$i"