화일의 확장자만 소문자로 변환하기?
글쓴이: lacovnk / 작성시간: 금, 2006/02/03 - 6:43오후
음. 변수를 쓰지 않고 해결할 수 있는 방법은 없을까요? 임시 파일도 쓰지 않고..
어렵군요 :(
그냥 변수를 쓰자면.. 대충 친절하게 짜봤습니다;
#!/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
Forums:
변수를 쓰는건 마찬가집니다만...
<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=... 으로 시작하는 한줄을 커멘트 처리하고 사용하십시오.
정규식은 안되나요?[code:1]rename 's/\.(	
정규식은 안되나요?
rename 's/\.([a-zA-Z]*)$/\.\L$1/g' *
----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ
댓글 달기