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

Max*_*Max 18 unix linux mv

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

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

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

提前谢谢 - 像往常一样 -

boe*_*107 29

使用的组合shufxargs(这是一个好主意,看看他们的文档有man):

shuf -n 10 -e * | xargs -i mv {} path-to-new-folder
Run Code Online (Sandbox Code Playgroud)

上面的命令选择当前文件夹(*部件)的10个随机文件,然后将它们移动到新文件夹.

更新

虽然更长,但人们可能会发现这个版本更容易理解:

ls | shuf -n 10 | xargs -i mv {} path-to-new-folder
Run Code Online (Sandbox Code Playgroud)

shuf只生成标准输入的随机排列,将结果限制为10(如使用head,但可能更快).

  • 这在 mac 上不起作用。在 Mac 上你必须执行 ls | gshuf-n 10| xargs -I {} mv {} 新文件夹路径` (2认同)

bma*_*ies 0

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