다중 파일 일괄 처리(find 이용)

디렉토리 안에 po 파일이 잔뜩 있습니다. (다행히 하위 디렉은 없습니다.)
이거 죄다 mo 로 바꿔야 합니다.

[code:3ebh8tcn]find -name "*.po" -exec msgfmt -o {} ;[/code:3ebh8tcn]
라는 식으로 하려고 했는데, 안되더군요. msgfmt 의 형식이 msgfmt -o 출력파일.mo 입력파일.po 라서…
위와 같이 되려면 msgfmt -o $1.mo $1.po 가 되어야 하기 때문입니다. 하지만 넘어오는 건 "$1.po" 이니…

{} 에서 .po 를 제외하고 다른 변수로 복사하면 될 것 같은데… 펄인가 파이썬인가에서 그런 것을 했던 기억이 있긴 합니다만…

그리고 추가로…
A list 가 있습니다. B 디렉토리의 파일명을 검사해 A list 와 일치하는 파일만 남기고 죄다 없애버리고 싶은데…
일치여부를 잡아서 다른 디렉으로 mv 시키면 될 것 같긴 합니다만… 이런 건 어떻게 해야할지요?

… 고민 많이 했습니다 ㅜ.ㅜ

for f in find . -name "*.po" | cut -d. -f-2
do msgfmt -o $f.mo $f.po
done

=> 확인해보니까 작동안되네요 orz…
후퇴…=3=33

오… 역시 소미님!!!
특정 상황(파일 이름에 대시나 스페이스가 들어가지 않는한)을 제외하고 너무 잘 동작합니다. :)

[code:38g1xaw9]#!/bin/sh

for file in $(find ./ -name *.po)
do
msgfmt -o ${file%%po}mo $file
done
[/code:38g1xaw9]

[code:h36vtg0t]#!/bin/sh

for file in $(find ./ -name "*.po")
do
msgfmt -o ${file%%po}mo $file
done
[/code:h36vtg0t]
이렇게 하니 너무 잘 됩니다.
감사합니다. :)

모두 스크립트 고수님들 뿐이군…

음…

깨갱…