'bash'에 해당되는 글 3건
- 2008.03.17 :: 모든 파일명 변경하는 스크립트
- 2007.01.24 :: 어제 만들어본 vsftpd의 ftpwho script.. 2
- 2006.11.07 :: 디쎄형이 만들어 달라고한 스크립트 2
Language
2008. 3. 17. 09:18
모든 파일명을 변경하는 스크립트다.
대문자->소문자, 소문자->대문자로 변환이 가능하다.
사용법: foo.sh {upper|lower}
#!/bin/bash
# Set variable
caseSwitch=${1}
execCNT=1
caseSwitch=${1}
execCNT=1
# Switch Check
if [ ! ${caseSwitch} ]; then
echo "Usage: {upper|lower}"
exit 0
fi
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
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
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
Language
2007. 1. 24. 09:57
vsftpd가 나온지 수년이 흘렀지만.. 아직도 제대로 된 ftpwho가 없다.
구글링을 해봐도 ps ax의 조합이나 log를 이용해서 처리하는 방법뿐..
그럼 실시간 처리가 안돼잖아...
그래서 한번 만들어 봤다.
결과는??
대 만족 *^---------------------,.-----------------------^*
구글링을 해봐도 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
##########################################################################
# 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
Language
2006. 11. 7. 18:30
디쎄형이 만들어 달라고 했던 삽질 스크립트다..
이거 사실 코드 공개하기가 졸라 쪽팔릴정도로;; 삽질코드다 ㅠ_ㅠ
원하는 작업은 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/
/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