Linux下实现文件夹内随机拷贝文件到另一个文件夹

前几天,搞训练集和验证集划分的时候,从源文件中拷贝训练集和验证集,没考虑到样本的均分,导致训练效果不尽如人意。又回过头来重新划分下,参考几个大神的代码,自己搞了个随机拷贝文件脚本,代码如下:

datapath=\'源文件路径\'
trainpath=\'训练集目标文件路径\'
dirlist=`ls $datapath`

dirNum=`ls $datapath  -l|grep \"^-\"|wc -l`
#echo $dirNum
k=0
for fileName in $dirlist
do 
	fileNameArr[k]=$fileName
	k=$k+1
done

arr=( $(seq 1 $dirNum ))
num=${#arr[*]}
#echo $num

filterNum=120

res=${arr[$(( $RANDOM%num ))]}
fileArr[1]=$res
#echo $fileArr[1]

let  i=2
while(( i <= filterNum));
do
	res=${arr[$(($RANDOM%num))]}
	fileArr[i]=$res
	#echo $res
	#echo ${fileArr[i]}
	for ((j=1 ; j<i ; j++));
	do
		numJ=${fileArr[j]}
		if  [ $res = $numJ  ]
		then
			unset fileArr[i]
			((i--))#i=$i-1
			break
		fi
	done
	((i++))#i=$i+1
done

for (( indexNum = 0 ; indexNum < $filterNum ; indexNum++ ))
do
	#i=${fileArr[indexNum]}
	#echo $i
	#echo ${fileNameArr[$i]}
	echo $indexNum
	mv  $datapath/${fileNameArr[${fileArr[indexNum]}]} $trainpath
done

收藏 打印