如何在Unix / Linux操作系统上移动给定数量的随机文件

问题描述 投票:14回答:4

我正面临着这个简单的任务,但我也想知道最简单的方法是什么。

我的建议是将一个给定数量的随机文件从一个目录移动到另一个目录。此任务是创建机器学习所需的两个数据集的一部分:训练集和测试集。我的目标是从目录中移走10%的文件以获取数据集agaist,我可以测试我的分类程序,并从源目录中获取训练集。

那么,这个“移动n随机文件”任务最紧凑的输入是什么?

提前谢谢 - 像往常一样 -

linux unix mv
4个回答
24
投票

使用shufxargs的组合(用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,但可能更快)。


2
投票

您可以使用shuf或sort -R来混洗文件列表。但你仍然需要采用一个子集,你可以用头/尾做。


1
投票

您可以使用生成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

0
投票

通常,我们使用python脚本或Java程序执行此操作。这些中的任何一个都可以使用适当的RNG来做出随机决策,然后调用必要的调用来移动文件。


0
投票

这个问题已经很老了,但是对于记录来说这适用于OSX。

你必须用gshuf安装brew install coreutils,然后使用:

tenpercent=$((`ls | wc -l` * 10/100))

ls | gshuf -n $tenpercent | xargs -I {} mv {} destination/path/
© www.soinside.com 2019 - 2024. All rights reserved.