记载一个平均分发文件的shell脚本,当一个目录下文件量太大的时候读取不方便需要将文件均匀分发到多个目录下边,sp_num=$((num/10))
为分成10份:
# basedir 生成的所有文件名old_file_list文件的存放位置以及split完后生成的x*文件的存放位置
basedir=/billdata/jlbilldata/work/data
# 需要分发的目录
bakpath=/billdata/jlbilldata/work/data/bakpath
# 分发至目的目录
target_path=/billdata/jlbilldata/work/data/topath
cd ${bakpath}
ls > ${basedir}/old_file_list
cd ${basedir}
num=`cat ${basedir}/old_file_list |wc -l`
sp_num=$((num/10))
split -$sp_num ${basedir}/old_file_list
move()
{
flag_tmp=`printf "%02d\n" ${2}`
flag=cmp${flag_tmp}
mkdir ${target_path}/${flag}
cat $1|while read fname
do
cp ${bakpath}/${fname} ${target_path}/${flag}/${fname}
done
}
i=1
for listname in `ls x*`
do
{
move "${listname}" "${i}"
}&
((i+=1))
done
wait