화일의 확장자만 소문자로 변환하기?

lacovnk의 이미지

음. 변수를 쓰지 않고 해결할 수 있는 방법은 없을까요? 임시 파일도 쓰지 않고..

어렵군요 :(

그냥 변수를 쓰자면.. 대충 친절하게 짜봤습니다;

#!/bin/bash
for filename in *
do
        echo "With $filename"
        namehead=`echo $filename | perl -pi -e "s/(.+)\.([^.]+)/\1/g"`
        nametail=`echo $filename | perl -pi -e "s/(.+)\.([^.]+)/\2/g"`
        oldfilename=$namehead.$nametail
        newnametail=`echo $filename | perl -pi -e "s/(.+)\.(\S)/\2/g" | tr A-Z a-z`
        newfilename=$namehead.$newnametail
        if [ "$oldfilename" != "$newfilename" ]
        then
                if [ -e "$newfilename" ]
                then
                        echo "$newfilename => existed"
                else
                        echo "$oldfilename => $newfilename"
                fi
        else
                echo "$oldfilename => already lower"
        fi
done
익명 사용자의 이미지

<code>
#!/bin/sh

DRYRUN=${DRYRUN:-echo}
for f in *; do
n="$(echo $f | sed -e 's/\.\([^\.]*\)$/.\L\1/')"
test ! -f "$n" -a "$n" != "$f" && $DRYRUN mv "$f" "$n"
done
</code>

스크립트의 동작이 원하는 대로라는걸 확인하신 다음에는
DRYRUN=... 으로 시작하는 한줄을 커멘트 처리하고 사용하십시오.

kall의 이미지

정규식은 안되나요?
rename 's/\.([a-zA-Z]*)$/\.\L$1/g' *

----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ