find로 directory 와 파일명 찾아 바꾸기 - 허접이라 잘 안되네요 고수님들의 도움 부탁드려요
글쓴이: muburi / 작성시간: 월, 2011/02/14 - 5:54오후
안녕하세요 고수님들!
쉽게 하위 디렉토리에서 특정 패턴이 있는 파일을 찾아서 파일명만 특정 패턴에서 다른 패턴으로만 바꾸고 싶습니다.
/user/test/abc/abc123ad.a 가 있다면 123 ->456으로 바꾸어 /user/test/abc/abc456ad.a
결론적으론 이렇게요
find . -type f -name "*123*" 이렇게 찾는거 까지는 되는데
xargs나 -exec를 써서 해보려고해도 잘되지 않네요
find . -type f -name "*123*" | xargs mv $1 <$1에서 특정패턴만 바뀐녀석>
이렇게 해보려 했는데 <$1에서 특정패턴만 바뀐녀석>를 모르겠네요...
고수님들의 솔루션을 부탁드려요
Forums:
음
$ find *123* | sed -e 's/\(.*\)123\(.*\)/mv \1123\2 \1456\2/' | sh
요렇게 하면 될거 같은데요?
와 잘 되네요 너무 감사드려요. sed -e
와 잘 되네요 너무 감사드려요.
sed -e 's/\(.*\)123\(.*\)/mv \1123\2 \1456\2/' | sh 이부분이 잘 이해가 되지는 않네요
\(.*\)123\(.*\) : 123 들어간 패턴을 찾는 거 같은데요. 아마 (.*)인지요?
\1123\2 \1456\2/ : \1과 \2는 앞에서 들어간 \(.*\)를 순서대로 받는 것같은데 맞는 것인지요?
(.*)123(.*) ==> 123 앞뒤의 글자들을
(.*)123(.*) ==> 123 앞뒤의 글자들을 1, 2번 그룹화 시킵니다.
그룹화된걸 이용하는건 \1 (1번그룹화), \2 (2번그룹화) 이구요.
\1123\2 \1456\2 = (1번그룹)123(2번그룹) (1번그룹)456(2번그룹)
이렇게 되겠네요.
/user/test/abc/abc123ad.a 가 예가되면
1번그룹 "/user/test/abc/abc"
2번그룹 "ad.a"
\1123\2 \1456\2 = (1번그룹)123(2번그룹) (1번그룹)456(2번그룹)
대입해보면
/user/test/abc/abc123ad.a /user/test/abc/abc456ad.a
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
감사드려요 그룹화에 대한 개념을 몰랐었는데 오늘도
감사드려요 그룹화에 대한 개념을 몰랐었는데 오늘도 한수 배우고 갑니다.
즐거운 하루 되셔요
댓글 달기