admin write
blogblogblogbloglocation loglocation logtag listtag listguest bookguest book
rss feed

모든 파일명을 변경하는 스크립트다.
대문자->소문자, 소문자->대문자로 변환이 가능하다.

사용법: foo.sh {upper|lower}

#!/bin/bash
# Set variable
caseSwitch=${1}
execCNT=1
# Switch Check
if [ ! ${caseSwitch} ]; then
 echo "Usage: {upper|lower}"
 exit 0
fi
# Excute Check
if [ "${caseSwitch}" == "upper" ]; then
 echo -n "Do you want change entire files to upper-case? ex)foobar->FOOBAR (Y/[N]) : "
 read acceptYN
 if [[ "${acceptYN}" =~ '^(y|Y)$' ]]; then
  regexCode="'a-z' 'A-Z'"
 else
  exit 0
 fi
elif [ "${caseSwitch}" == "lower" ]; then
 echo -n "Do you want change entire files to lower-case? ex)FOOBAR->foobar (Y/[N]) : "
 read acceptYN
 if [[ "${acceptYN}" =~ '^(y|Y)$' ]]; then
  regexCode="'A-Z' 'a-z'"
 else
  exit 0
 fi
else
 exit 0
fi
# Change Excute
for list in *
do
 orig_name=`basename $list`
 conv_name=`echo ${orig_name} | tr ${regexCode}`
 if [ "${orig_name}" != "${conv_name}" ]; then
  echo "[${execCNT}] ${orig_name} -> ${conv_name}"
  mv ${orig_name} ${conv_name}
  let "execCNT+=1"
 fi
done
exit 0

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

vsftpd가 나온지 수년이 흘렀지만.. 아직도 제대로 된 ftpwho가 없다.
구글링을 해봐도 ps ax의 조합이나 log를 이용해서 처리하는 방법뿐..
그럼 실시간 처리가 안돼잖아...
그래서 한번 만들어 봤다.
결과는??
대 만족 *^---------------------,.-----------------------^*

#!/bin/bash
 
##########################################################################
#  Script Name  : ftpwho                                                 #
#  Description  : ProFTPD의 ftpwho 와 비슷하게 구현된 스크립트           #
#  Version      : 1.0.3                                                  #
#  License      : Hyeok-Jung, KIM (Nick. 티니)                           #
#  WebSite      : LTN(Linux.Tini4u.Net)                                  #
#  E-Mail       : sky (at) tini4u.net                                    #
#  LastUpdate   : 2007. 01. 23.                                          #
#  Message      : 이 스크립트는 VsFTPD의 독립모드(Standalone) 기준으로   #
#                 제작되었습니다.                                        #
#                 사용/배포/수정은 자유이나, 이부분은 삭제하지 마십시요  #
##########################################################################
 
str_stat=`ps -ef | grep 'vsftpd' | grep 'LISTENER' | sed -e 's/.*vsftpd: //'`
 
if [ "$str_stat" ]; then
        usr_cnt=`ps -ef | grep 'vsftpd' | grep 'connected' | wc -l`
        if [ "$usr_cnt" != "0" ]; then
                echo "♧ 현재 접속된 사용자는 총 $usr_cnt 명 입니다."
                echo "-----------------------------------------------"
                ps -ewwf \
                        | grep 'vsftpd' \
                        | grep -v 'grep' \
                        | grep -v 'sed' \
                        | grep -v ': connected' \
                        | grep -v 'LISTENER' \
                        | sed -e 's/.*vsftpd: //' \
                        | sed -e 's/:/\t| Status:/' \
                        | sed -e 's/STOR/UpLoad =>/' \
                        | sed -e 's/RETR/DownLoad =>/' \
                        | sed -e 's/\<\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\>/IP: \1/' \
                        | sed -e 's/\//\t| ID: /'
        else
                echo "♧ 현재 접속된 사용자가 아무도 없습니다."
        fi
else
        echo "VsFTP 데몬이 실행되고 있지 않습니다. VsFTP 데몬을 실행해주시기 바랍니다."
fi

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 황선빈
    2012.04.17 12:25
    댓글 주소 수정/삭제 댓글
    안녕하세요....저는 고등학생인데요.. 제가 서버를 하는 쪽에 관심이 많은데요..
    어제부터 vsftpd를 하고 있는데요ㅜ 지금은 /etc/vsftpd.conf안에 설정 내용을
    공부하는 중인데요ㅜㅜ 이해가 잘안되고 햇요... 그래서 인터넷을 찿다가
    님이 만드신것을 봤는데요ㅜㅜ 저를 가르쳐 주시면 안될까요?

    가르쳐주실 마음이 있으시면 네이트온 이메일 써놓고 갈게요... 친구추가 부탁드립니다.
    ghkd95gur@cyworld.com
    • 2012.05.08 10:05 신고
      댓글 주소 수정/삭제
      안녕하세요.
      블로그를 자주 오지 않다보니, 이제야 글을 남기네요
      제가 질답 형식으로 뭔가 도움을 드릴수는 있겠지만
      일일히 하나씩 가르쳐 드릴 수는 없습니다.
      제가 학원강사도 아니고.. 저도 현업이 있다보니.. ^^;

디쎄형이 만들어 달라고 했던 삽질 스크립트다..
이거 사실 코드 공개하기가 졸라 쪽팔릴정도로;; 삽질코드다 ㅠ_ㅠ

원하는 작업은 Year/Month/*.bin을 옮기는것이었는데, 조건이 경로를 살려야 된다.
샘플은 아래와 같다.

원본 디렉토리 내용:
/mnt/SAT_ORG_2/NOAATDF/Y1999/M05/foobar_01.bin
/mnt/SAT_ORG_2/NOAATDF/Y1999/M05/foobar_02.bin
/mnt/SAT_ORG_2/NOAATDF/Y1999/M05/foobar_01.txt
/mnt/SAT_ORG_2/NOAATDF/Y1999/M05/foobar_02.txt
/mnt/SAT_ORG_2/NOAATDF/Y1999/M06/foobar_03.bin
/mnt/SAT_ORG_2/NOAATDF/Y1999/M06/foobar_04.bin
/mnt/SAT_ORG_2/NOAATDF/Y1999/M06/foobar_03.txt
/mnt/SAT_ORG_2/NOAATDF/Y1999/M06/foobar_04.txt
/mnt/SAT_ORG_2/NOAATDF/Y2000/M05/foobar_01.bin
/mnt/SAT_ORG_2/NOAATDF/Y2000/M05/foobar_02.bin
/mnt/SAT_ORG_2/NOAATDF/Y2000/M05/foobar_01.txt
/mnt/SAT_ORG_2/NOAATDF/Y2000/M05/foobar_02.txt
/mnt/SAT_ORG_2/NOAATDF/Y2000/M06/foobar_03.bin
/mnt/SAT_ORG_2/NOAATDF/Y2000/M06/foobar_04.bin
/mnt/SAT_ORG_2/NOAATDF/Y2000/M06/foobar_03.txt
/mnt/SAT_ORG_2/NOAATDF/Y2000/M06/foobar_04.txt

이동 디렉토리 경로:
/mnt/SAT_ORG_3/NOAA/BIN/

처음엔 간단히 생각해서 처리하려고 했는데 이게 생각보다 삽질을 만들어 냈다.
순간적으로 생각난게 list를 뽑아서 걸러낸뒤에 그대로 복사시키면 된다고 생각을 했는데
생각해보니 경로를 그대로 살려야 한다는 조건이 붙어 있어서 awk를 쓰게 됐다.
완성된 코드는 아래와 같다.

#!/bin/sh

find /mnt/SAT_ORG_2/NOAATDF/ -type d -name '*.bin' > list.txt

cat list.txt | while read file
do
year=`echo $file | awk -F / '{print $5}'`
month=`echo $file | awk -F / '{print $6}'`
mkdir -p /mnt/SAT_ORG_3/NOAA/BIN/$year/$month
cp -pR $file /mnt/SAT_ORG_3/NOAA/BIN/$year/$month/
done

rm -f list.txt

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. LanCome
    2006.11.07 19:37
    댓글 주소 수정/삭제 댓글
    @_@ 대충봤을땐 간단한것같긴한데...

    자세히보니 후덜덜덜덜덜...;ㅂ;