我正面临着这个简单的任务,但我也想知道最简单的方法是什么。
我的建议是将一个给定数量的随机文件从一个目录移动到另一个目录。此任务是创建机器学习所需的两个数据集的一部分:训练集和测试集。我的目标是从目录中移走10%的文件以获取数据集agaist,我可以测试我的分类程序,并从源目录中获取训练集。
那么,这个“移动n随机文件”任务最紧凑的输入是什么?
提前谢谢 - 像往常一样 -
使用shuf
和xargs
的组合(用man
查看他们的文档是个好主意):
shuf -n 10 -e * | xargs -i mv {} path-to-new-folder
上面的命令选择当前文件夹的10个随机文件(*
部分),然后将它们移动到新文件夹。
虽然更长,但人们可能会发现这个版本更容易理解:
ls | shuf -n 10 | xargs -i mv {} path-to-new-folder
shuf
只是生成标准输入的随机排列,将结果限制为10(就像使用head
,但可能更快)。
您可以使用shuf或sort -R来混洗文件列表。但你仍然需要采用一个子集,你可以用头/尾做。
您可以使用生成0到32767之间的int的bash随机生成器来选择是否必须将文件放在set1或set2中。那样做:
for file in ./*; do
val=$RANDOM
if test $val -gt 3276; then
mv "$file" ../set1
else
mv "$file" ../set2
fi
done
通常,我们使用python脚本或Java程序执行此操作。这些中的任何一个都可以使用适当的RNG来做出随机决策,然后调用必要的调用来移动文件。
这个问题已经很老了,但是对于记录来说这适用于OSX。
你必须用gshuf
安装brew install coreutils
,然后使用:
tenpercent=$((`ls | wc -l` * 10/100))
ls | gshuf -n $tenpercent | xargs -I {} mv {} destination/path/