"foo"로 시작하는 파일 이름을 "boo"로 바꿔야 합니다.
이것은 내가 사용하는 스크립트입니다.
#!/bin/sh
for f in *.jpg;
do
mv -- "{$f}" "${f/foo/boo}";
done
하지만 실행하면 심각한 대체 오류가 발생합니다. 내 코드에 무슨 문제가 있나요?
답변1
/bin/sh
일반적인 sh 기능만 허용하는 것으로 보이는 쉘을 사용하고 있습니다 . 확장과 같은 고급 기능은 ${//}
bash와 같은 셸에서만 사용할 수 있습니다.
Shebang을 바꾸면 모든 것이 잘 작동합니다.
또한 살펴보십시오 ( man rename
util-linux에서는 " prename
여기가 어디에 있습니까" 라고도 함). rename
이렇게 하면 정확히 필요한 작업을 수행할 수 있습니다.
rename 's/^foo/boo/' foo*.jpg
관심이 있는 경우 /bin/sh
다음을 사용할 수 있습니다.
mv -- "$f" "boo${f#foo}"
자세한 내용은 man sh를 참조하세요.