統計svn指定的url下所有文件的總大小(不包括目錄)


shell


  • Read me

    • 要求:Linux OS
    • 准備:將下面的代碼放入文本文檔並重命名文件為“count_svn_files_size.sh”
    • 使用:sh count_svn_files_size.sh YOUR_SVN_URL
  • 源碼

#!/bin/bash

# 統計svn指定的url下所有文件的總大小,排除掉了目錄
# 使用方法: sh count_svn_files_size.sh YOUR_SVN_URL
# 舉例: sh count_svn_files_size.sh http://127.0.0.1/svn/abc/def 

# 指定的url目錄
base_url=$1
# 用來臨時存儲svn目錄的文件
temp_dir_record="temp_dir_record.log"
# 總目錄數量
all_dir_num=0

# 判斷傳入的url是否為空
if [ "${base_url}" == "" ]; then
  echo "empty svn url"
  exit 1;
fi

# 刪除臨時文件,避免重復執行命令時收到干擾
rm -f ${temp_dir_record}

# 進度條方法: progress 1 100
# 參數1: 當前值
# 參數2: 總值
function progress () {
  pro=`awk 'BEGIN{printf "%d",('$1'/'$2')*100}'`
    spaces=`seq -s '#' $((${pro} +1)) | sed 's/[0-9]//g'`
    if [ "${pro}" != "100" ]; then
      printf "[%-100s] %d%% \r" "${spaces}" "${pro}"
    else
      printf "[%-100s] %d%% \n" "${spaces}" "${pro}"
    fi
}

# 遞歸統計指定的url下有多少目錄,並緩存到臨時文件中
function count_dir() {
  local url=$1
  echo "counting dir: ${url}"
  echo "${url}" >> ${temp_dir_record}
  local arr=`svn list $url | grep '\/' | grep -v '\.\/'`
  for d in ${arr}
  do
    d_url="${url}${d}"
    count_dir ${d_url}
  done
}

# 統計所有目錄下的所有文件
function count_files() {
  local url=$1
  local files_size=`svn list -v ${url} | grep -v '\.\/' | grep -v '\/' | awk '{sum+=$3} END {print sum}'`
  if [ "${files_size}" == "" ]; then
    echo 0
  fi
  echo ${files_size}
}

# 統計目錄
echo "start to count all dir"
starttime=`date +'%Y-%m-%d %H:%M:%S'`
count_dir "${base_url}/"
all_dir_num=`cat ${temp_dir_record} | wc -l`
echo "end to count all dir"
echo "all dir num is: ${all_dir_num}"
endtime=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
echo "it took "$((end_seconds-start_seconds))"s"

# 統計文件的空間占用
echo "start to count repository size"
total_size=0
progress_num=0
starttime=`date +'%Y-%m-%d %H:%M:%S'`
for line in `cat ${temp_dir_record}`
do
  size=$(count_files ${line})
  total_size=$((${total_size} + ${size}))
  progress_num=$((${progress_num} + 1))
  progress ${progress_num} ${all_dir_num}
done
echo "end to count all file size"
echo "total size is: ${total_size}Bytes"
endtime=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
echo "it took "$((end_seconds-start_seconds))"s"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM