“고전 했던 부분”은 저도 공감이 많이 갑니다. :)
몇가지만 말씀드리면..
path=`echo $pfile | sed 's//([^/]*)$//'`
여기서는 별차이 없지만..
path=`echo $pfile | sed 's#/([^/]*)$##'`
위의 방법도 유효합니다. s 다음에 오는 문자는 전부 구분자로 사용하실 수 있습니다.
물론 #로 사용하시면 그 문장에선 #로 통일해야합니다.
저는 아래의 방법을 선호합니다. bash, ksh 전부 적용이 되구요.
pfile=${pfile%/} # 디렉토리면.. 마지막에 붙은 '/'를 없앤다.
# 예) /home/user/ -> /home/user
path=${pfile%/*}
file=${pfile##*/}
reverse도 재밌네요. 저도 reverse 리스트를 만들려고 짠 게 있는데...
이건 어떨까해서 적습니다.
# 여기서는 IFS를 변경하면 안됩니다.
# 좀 눈에 안 들어오는 단점이 있긴하지만 성능은 만족할 만합니다. :)
reverse=$(echo "$a" |
awk 'BEGIN { RS="^D"; FS=""; }
{ for (i = 1; i < NF; i++) print $(NF-i); }')
다만.. 저 RS에 들어간 문자(^D)가 Ctrl+V 누르고 Ctrl+D 를 눌렀을 때 나오는 문자인데..
그리 적당해보이지는 않습니다. --a 여기서는 쓸 수 있긴 하겠지만 말입니다.
사족인가요 --;;;
: 안녕하세요?
:
: 몇달전에 벼르던 녀석인데 이제서야 완성했습니다.
: 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
: ----------------------
--
ㅅ 새 새ㄹ 새로 새로ㅇ 새로우 새로운
ㅅ 새 샐(?) 새ㄹ 새로 새롱(?) 새로우 새로운
세벌식과 함께~