shell怎么将一批文件随机取出分成N份

sh/bash/dash/ksh/zsh等Shell脚本
回复
hjoflash
帖子: 6
注册时间: 2008-01-15 13:59

shell怎么将一批文件随机取出分成N份

#1

帖子 hjoflash » 2008-07-24 13:31

shell怎么将一批文件随机取出分成N份

我是新手希望得到帮助。

例如将600个同一目录下的文件随机分成3份,每份200个。。。
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#2

帖子 bones7456 » 2008-07-24 15:06

有什么意义吗?

apt-get install bsdgames 以后,参考: man 6 random
关注我的blog: ε==3
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#3

帖子 eexpress » 2008-07-24 15:15

分发试题?
● 鸣学
头像
yaoms
帖子: 4952
注册时间: 2007-10-19 14:51
来自: 深圳

#4

帖子 yaoms » 2008-07-24 15:16

代码: 全选

 sort --help
Usage: sort [OPTION]... [FILE]...
Write sorted concatenation of all FILE(s) to standard output.
.....

.....
  -R, --random-sort           sort by random hash of keys
      --random-source=FILE    get random bytes from FILE (default /dev/urandom)
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#5

帖子 bones7456 » 2008-07-24 16:36

恩,sort比较英明.
关注我的blog: ε==3
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#6

帖子 xiooli » 2008-07-24 17:06

代码: 全选

#!/bin/bash
#第一个参数是欲搞文件夹(默认当前文件夹),第二个参数欲选择文件总数
#(默认是该文件夹内总文件数),第三个参数是欲分份数(默认分为3份)。

dir=${1:-./}
files=($(ls $dir))
nf=${#files[@]}
nm=${2:-$nf}
N=${3:-3}
file_arr=($(ls $dir | sort -R |head -n $nm))
each_nm=$((${#file_arr[@]} / $N))
for ((j=1;j<=$N;j++)); do
		echo "	第$j份:"
		last=$(($each_nm * $j))
		[ $j = $N ] && ((last = ${#file_arr[@]}))
		for ((k=$each_nm*($j-1);k<$last;k++));do
				echo ${file_arr[$k]}
		done
done
回复