shell怎么将一批文件随机取出分成N份
我是新手希望得到帮助。
例如将600个同一目录下的文件随机分成3份,每份200个。。。
shell怎么将一批文件随机取出分成N份
-
- 帖子: 6
- 注册时间: 2008-01-15 13:59
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系:
- yaoms
- 帖子: 4952
- 注册时间: 2007-10-19 14:51
- 来自: 深圳
代码: 全选
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'
alias 爱慕颇雷尔='mplayer'
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系:
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
代码: 全选
#!/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