从文件集合中收集随机样本的最佳方法

bit*_*ion 27 linux command-line shell filesystems directory

假设有一个包含 300 个数据文件的目录。我想随机选择 200 个这些文件并将它们移动到另一个目录中。有没有办法在 Unix/Linux 下做到这一点?

Kev*_*vin 34

如果您的系统有shuf,您可以非常方便地使用它(甚至处理丑陋的文件名):

shuf -zen200 source/* | xargs -0 mv -t dest
Run Code Online (Sandbox Code Playgroud)

如果你没有,shuf但有一个sorttake -R,这应该工作:

find source -type f -print0 | sort -Rz | cut -d $'\0' -f-200 | xargs -0 mv -t dest
Run Code Online (Sandbox Code Playgroud)

  • 啊,是的,因为除了排序工具之外,还有什么地方可以寻找洗牌。(至少`shuf`不叫`tros`,因为它与排序相反。) (7认同)
  • 没有与排序相反的事情(与没有“没有天气”这样的事情的意义相同)。Random 仍然是排序的,它只是随机排序。 (2认同)
  • @SigmaX 确实很禅意,不是吗。提示:它是 3 个独立的标志。 (2认同)

gle*_*man 2

files=(*)
for (( i=0; i<200; i++ )); do
    keys=("${!files[@]}")
    rnd=$(( RANDOM % ${#keys[@]} ))
    key=${keys[$rnd]}
    mv "${files[$key]}" "$otherdir"
    unset files[$key]
done
Run Code Online (Sandbox Code Playgroud)