从给定目录中随机选择一部分文件

从给定目录中随机选择一部分文件

给定目录下大约有 10000 个文件。有没有任何命令可以帮助我从中随机挑选 1000 个文件并将它们放入另一个目录中。所选文件应从原始目录中删除。

答案1

如果你有shuf,它会很容易让你做你想做的事,前提是文件名中没有换行符,并且没有子目录:

mapfile -t sample < <(shuf -n 1000 -e given_directory/*)
mv "${sample[@]}" other_directory

find如果有子目录,您可以使用而不是 glob 来获取文件列表。或者您可以进行过采样和过滤。find还将帮助您处理名称中可能包含换行符的文件(这确实是一个坏主意,但这并不一定意味着您可以忽略这种可能性),因为您可以将操作-print0-z标志结合使用shuf。例如,

find given_directory -type f -print0 |
shuf -z -n 1000 |
xargs -0 mv -t other_directory

mv -t是一个(非常有用的)Gnu 扩展,它允许您在命令行开头提供目标目录,这与在命令行末尾放置多个参数的xargs/模型很好地配合。find -exec

相关内容