안녕하세요
이번에 공유할 정보는 " 파일비교 스크립트 " 입니다.
우선 파일목록 추출 먼저 작성 하였습니다.
상황은 외부망, 내부망 각 서버에 파일의 목록을 추출하여
서버 간 동기화가 진행되지 않고 홀로 존재하는 목록을
추리는 것을 목표로 진행 하였습니다
우선 환경은
- 외부망은 WAS 1
- 내부망은 WAS 3
- 폴더경로 /app_data/iros_upload/
- 비교대상 경로, 파일명, 크기, 최종수정시간
으로 가정 하였습니다.
1. 서버의 특정폴더의 파일목록 추출하기(초본 및 최종본)
(초본)
-----------------------------------------------------------------------------------------------------------------------------------
#!/bin/bash
echo ""
echo " Starting Extraction in WAS1"
echo ""
echo " Please Waiting..."
echo ""
###extraction stage
find /app_data/iros_upload/ -exec ls -d -l --time-style="+%Y-%m-%d_%H:%M:%S" {} \; | awk '{print "path:" substr($0,index($0,$7)),"| size:"$5, "| time:"$6}' > Was_1.txt
###sort stage was1
sort -u /app_data/compare_room/Was_1.txt > temp
cat temp > Was_1.txt
###delete temp
rm /app_data/compare_room/temp
echo ""
echo " Completed Extraction!!!"
-----------------------------------------------------------------------------------------------------------------------------------
echo 부분 :
스크립트 실행 시 사용자의 편의를 위하여 문구 출력을 추가 하였습니다, 폴더의 용량이 큰 경우 사용자가 스크립트 실행 시 꽤 많은 시간이 소요되므로 혹여나 "뭐야 멈춘거 아냐 ? " 하는 의구심을 줄이기 위함이 목적 입니다
extraction stage 부분 :
추출을 원하는 폴더를 find 명령어를 이용하여 폴더전체를 검색하여 옵션 추가적으로 ls -d -l 등을 준것을 파일을 비교하기 위해서는 최소한 경로, 크기, 수정시간 등을 비교하여야 하므로 ls -l 명령어를 이용하여 모든 정보를 출력 및 시간을 보기좋게 다시 출력하도록 수정하였습니다, 그런다음 awk를 이용하여 필요한 부부만 자른 후 > 리다이렉션을 이용하여 텍스트 파일을 생성합니다.
sort stage 부분 :
추출한 파일을 sort 옵션을 이요하여 정렬하여 임시 파일 생성 후 cat으로 읽어 들인 후 다시 > 리다이렉션을 통하여 텍스트 파일로 변환하여 줍니다. 여기서 왜 굳이 ? temp를..? 이유는 저도 알아보고 있는 중입니다만 번거로움을 피하기 위해서 최초 추출한 파일명 즉 Was_1.txt로 바꾸었으나 cat으로 읽어 들이는 과정전에 데이터가 소실되는 문제가 발생하여 아마 파일명 동일로 인한 문제로 temp를 생성하여 살짝 꼬아주니 문제가 해결되었습니다
delete temp 부분 :
말 그대로 위에서 생성한 임시 temp를 삭제하는 과정 입니다
끝으로 완료 된 후 추출이 완료되었다는 문구를 출력 합니다
아래는 extraction stage 부분을 편집하고 추출하는 과정에서 만들어 참고로 본 명령문이니 참조 하시면 좋을 것 같습니다.
-----------------------------------------------------------------------------------------------------------------------------------
find /app_data/iros_upload/ -exec ls -d -l {} \; | awk '{for (i=5; i<=NF; i++) print $i}' > Was_3.txt
--5번 필드부터 최종필드까지 출력
find /app_data/iros_upload/ -exec ls -d -l {} \; | awk '{for (i=9; i<=NF; i++) print "path : "$i, "size : "$5}' > Was_1.txt
--path는 for구문으로 9번필드 부터 끝까지 출력, size는 5번필드 출력
find /app_data/compare_room/ -exec ls -d -l {} \; | awk '{print "path : " substr($0,index($0,$9)),"size : "$5}'
--사이즈 및 경로 공백포함 출력
find /app_data/compare_room/ -exec ls -d -l --time-style="+%Y-%m-%d_%H:%M:%S" {} \; | awk '{print "path : " substr($0,index($0,$7)),"size : "$5, "time : "$6}'
--경로(공백포함), 사이즈. 시간(년-월-일_시:분:초)
find /app_data/iros_upload/ -exec ls -d -l --time-style="+%Y-%m-%d_%H:%M:%S" {} \; | awk '{print substr($0,index($0,$7))"|"$5"|"$6}' > Was_3.txt
--엑셀에서 .csv파일로 불러들일 때 '|'기호로 구분하여 사용자가 읽기 쉽게 하기 위해서
-----------------------------------------------------------------------------------------------------------------------------------
위의 명령문들을 편집하고 수정하여 나온 최종본 입니다
(최종본)
-----------------------------------------------------------------------------------------------------------------------------------
extraction.sh
#/bin/bash
echo ""
echo " Starting Extraction in $ex_result"
echo ""
echo " -target location : /app_data/iros_upload"
echo ""
echo " Please Waiting..."
echo ""
###extraction_path
ex_path=`cat extraction.config | grep ex_path | awk -F= '{print $2}'`
ex_file=`cat extraction.config | grep ex_file | awk -F= '{print $2}'`
ex_txt=`cat extraction.config | grep ex_txt | awk -F= '{print $2}'`
ex_result=`cat extraction.config | grep ex_result | awk -F= '{print $2}'`
###extraction stage
find $ex_path -exec ls -d -l --time-style="+%Y-%m-%d_%H:%M:%S" {} \; | awk '{print "path:" substr($0,index($0,$7)),"| size:"$5, "| time:"$6}' > $ex_txt
find $ex_path -exec ls -d -l --time-style="+%Y-%m-%d_%H:%M:%S" {} \; | awk '{print substr($0,index($0,$7))"|"$5"|"$6}' > $ex_txt
###sort stage was
sort -u $ex_txt > temp
cat temp > ${ex_result}_$(date '+%Y%m%d%H%M%S').txt
###delete temp
rm $ex_file/$ex_txt $ex_file/temp
echo ""
echo " Extraction on Completed!!!"
echo ""
-----------------------------------------------------------------------------------------------------------------------------------
extraction.config
###This is extraction.config###
ex_path=/app_data/iros_upload
ex_file=/app_data/compare_room
ex_txt=Was1.txt
ex_result=Was1
-----------------------------------------------------------------------------------------------------------------------------------
extraction_path 부분 :
ex_path=`cat extraction.config | grep ex_path | awk -F= '{print $2}'` 이렇게 간 이유는 스크립트 부분은 그대로 두고 경로만 변경하여 어디에서는 이식성이 좋도록 하기 위해서 바꿨습니다.
'Linux' 카테고리의 다른 글
[Linux] httpd.conf 옵션 설정 한글설명 (0) | 2019.09.23 |
---|---|
[Linux] OpenSSL 업데이트 Update 0.9.8e - 1.0.1e (0) | 2019.09.19 |
[Linux] CentOS 5 yum error (0) | 2019.09.18 |
[Linux] APM 소스 설치 (0) | 2019.02.19 |
[etc] POP3 vs IMAP 차이 (0) | 2019.01.14 |