안녕하세요?
몇달전에 벼르던 녀석인데 이제서야 완성했습니다.
KLDP에 상당히 많은 유용한 관련 팁들이 많은데 저의 직성에는 차지 않아서
만들어 보았습니다.
비슷한 툴이 있을것 같은데 찾질 못해서...
원래 초기 목적은 공백 문자열이 들어간 파일을 "_" 문자로 바꾸는게
목적이었는데 추가로 디렉토리도 가능하도록 만들었습니다.
짜면서 고전(?)했었던 부분
- 공백문자가 들어갈 경우의 for 구문($IFS 재설정으로 해결)
- sed 's/FROM/TO/g' 와 sed "s/FROM/TO/g" 차이점
- 디렉토리일 경우의 역순 만들기(20분 동안 해멤)
- 기타 색깔로 출력(/etc/syscofig/init 참고로 해결)
[쉘스크립트] renameto 특정 파일/디렉토리 이름 바꾸기
본쉘로 짠 스크립트입니다.
소스가 있는 곳 :(이곳에 올리기에 버겁군요)
http://ftp.linuxchannel.net/devel/renameto/renameto-sh.txt 사용법 및 기타
http://ftp.linuxchannel.net/devel/renameto/README.txt 사용한 예 : 스크린샷
http://www.linuxchannel.net/images/renameto.gif [기능]
- 특정 문자열의 파일을 찾아서 바꿈
- 특정 문자열의 디렉토리를 찾아서 바꿈
- 바꾸기 전에 view 기능 제공
- 특정 디렉토리에서 검색가능
- 현재디렉토리, 모든 서브디렉토리, 특정 깊이의 디렉토리 검색
[간단 사용법]
1. 설치(?)
renameto-sh.txt 파일을 다운받아 renameto 이름으로 바꾸고
퍼미션은 755 정도로 /usr/local/bin/renameto 나 $PATH로 복사해 놓습니다.
2. 도움말
$ renameto --help
옵션에서
-R은 하위의 모든 디렉토리에서 검색
-R0 은 현재 디렉토리에서만 검색
-Rn 은 현재디렉토리에서 그다음 n단계 디렉토리까지만 검색, n은 ([0-9]*)
-R 옵션이 없다면 현재디렉토리에서 만 검색
-d, -dir, --d, --dir
파일대신 디렉토리에 적용
이 옵션이 없다면 기본적으로 파일을 그 대상으로 함
-v, -view, --view, -t, -test, --test
파일이나 디렉토리를 바꾸지 않고 그냥 찾아서 출력만 함(확인할때)
이 옵션이 없다면 매치되는 파일이나 디렉토리를 찾아서 바꿈.
찾을 문자열-> 바꿀 문자열
'/from_str/to_str/'
공백 문자열이 들어갈 수 있으므로 받드시 전체를 ' 나 "로 묶어줌
from_str문자열을 to_str문자열로 바꿈
양자의 구분자는 / 로 구분
'찾을 디렉토리나 파일 대상'
"* *" : 공백 문자열이 들어간 모든 파일이나 디렉토리 대상
"*" : 모든 파일이나 디렉토리 대상
"*.mp3" : 확장자(?)가 mp3인 모든 파일
"*.[hH][tT][mM][lL]" : *.html *.HTML *.Html ... 등과 매치
"/home/*.php" : /home 디렉토리를 대상으로 *.php 파일
"home/*.php" : 현재 디렉토리에서 상대 경로가 home 인 디렉토리
3. 예제
예제1. 현재 디렉토리에서(하위로 내려가지 않고) 파일이 *.MP3 인 파일을 찾아서
*.mp3로 바꿀려면 ?
$ renameto '/MP3/mp3/' '*.MP3'
이건 rename *.MP3 *.mp3 와 같습니다.
예제2. /var/www/html 디렉토리 및 그하위 모두에서 공백 문자열이 들어간 모든
파일을 찾아서 공백을 없애려면?
먼저 테스트(view)해 봅니다.
$ renameto -R -test '/ //' '/var/www/html/* *'
맞게 출력된다면
$ renameto -R '/ //' '/var/www/html/* *'
디렉토리일 경우에는
$ renameto -R -dir '/ //' '/var/www/html/* *'
END
----------------------