반달가면 이글루에서 백업 - http://bahndal.egloos.com/517484
특정한 파일이 현재 전송되고 있는지 판단하기 위한 방법이다. 다수의 파일을 ftp로 받고 있거나 NFS를 통해서 복사하는 상황에서 이 파일들에 대한 작업을 해야 하는데, 전송중인 파일과 전송완료된 파일을 구분하기 위한 것.
파일이 마지막으로 수정된 시간과 현재 시간과의 차이를 확인하여 정해 둔 기준과 비교하면 되겠다. 파일이 마지막으로 수정된 시간은 stat 명령으로 확인한다. 아래의 예시를 보자.
# 마지막으로 수정된 시간, 1970.1.1 0시부터 경과한 시간을 초(second)로 표시
stat -c %Y my_file.txt
-c 옵션으로 출력할 항목을 지정하는데, %Y 항목을 사용. stat 명령을 이용하면 그 외에도 파일에 대한 다양한 정보를 확인할 수 있다. 자세한 내용은 man 페이지를 참고하자.
man stat
현재 시간은 date 명령을 사용하여 출력. 앞의 stat 명령과 동일한 형태로 출력할 수 있다.
# 현재 시간, 1970.1.1 0시부터 경과한 시간을 초(second)로 표시
date "+%s"
대상 파일이 현재 전송중이라면, 마지막으로 수정된 시간과 현재 시간과의 차이가 근소해야 한다. 별 문제가 없다면 1초 이하일 것이다. 만약 부하가 많이 걸리거나 네트워크 상태가 별로 좋지 않아서 전송이 지연되고 있다면 좀 더 차이가 날 수도 있을 것이다.
대강 시간차가 10초 이하면 현재 전송중이라고 판단하고 그 이상이라면 전송이 끝났다고 판단하는 경우의 예시를 보자.
# 대상 파일: my_file.txt
target_file=my_file.txt
# 시간차 기준: 10초
diff_limit=10
# 마지막으로 수정한 시간
mod_time=`stat -c %Y $target_file`
# 현재 시간
cur_time=`date "+%s"`
# 시간 차이 계산
diff=`echo "$cur_time - $mod_time" | bc`
# 시간차가 $diff_limit 이하면 전송중이라고 판단
if [ $diff -le $diff_limit ]
then echo "$target_file: 전송중입니다."
else echo "$target_file: 전송완료되었습니다."
fi
'bash script' 카테고리의 다른 글
[bash: head] 여러개의 파일 내용을 출력하면서 파일명 함께 출력하기 (0) | 2021.07.13 |
---|---|
[bash: grep] 특정 길이의 문자열에 대한 검색 (0) | 2021.07.06 |
[bash: if, test] 파일 또는 디렉토리 존재 유무 확인 (0) | 2021.06.08 |
[bash: grep] 문자열 검색과 파일명 확인의 조합 (0) | 2021.05.10 |
[bash: awk] 여러 종류의 단어 구분자를 지정해서 단어 선택하기 (0) | 2021.04.16 |