bash script2023. 9. 8. 13:13

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/617410

예전에 파일이 마지막으로 수정된 시간이 언제인지를 확인해서 파일이 현재 전송중인지 판단하는 방법을 정리해 두었는데, 한가지 방법을 더 정리해 두기로.

두번째 방법은 일정 시간 동안 파일 크기가 변했는지 그대로인지를 보고 판단하는 것이다. 현재 파일 크기가 얼마인지 확인하고 이후 일정 시간, 예를 들어 10초 후에 파일 크기를 다시 확인해서 크기가 같은지를 비교한다. 만약 파일이 전송중이라면 10초후의 파일 크기는 좀 더 늘어나 있을 것이다.

파일 크기만 출력하려면 stat 명령에서 아래와 같이 하면 되겠다. -c 옵션으로 출력 형식을 지정해 주는데, 파일 크기는 %s이다.

# my_file.txt 파일의 크기 확인
stat -c %s my_file.txt

시간차 기준을 10초로 하여 전송중인지 여부를 판단하는 예시는 아래와 같다.

# 대상 파일: my_file.txt
target_file="my_file.txt"
# 파일 크기 확인
cur_size=`stat -c %s "$target_file"`
# 10초간 대기
sleep 10
# 파일 크기 다시 확인
next_size=`stat -c %s "$target_file"`
# 측정한 파일 크기가 서로 다르면 전송중
if [[ "$cur_size" != "$next_size" ]]
then echo "$target_file: 전송중입니다."
else echo "$target_file: 전송완료되었습니다."
fi

파일이 수정된 시간을 기준으로 판정하는 것보다 시간이 오래 걸린다는 단점이 있긴 한데, ftp 프로그램에서 "기존의 시간정보를 그대로 유지(preserve timestamp of transferred files)"하는 기능을 사용하고 있다거나 하면 파일 크기를 이용해서 판단하는 것이 더 나을 것이다.

728x90
Posted by 반달가면