![从给定目录中随机选择一部分文件](https://linux22.com/image/93860/%E4%BB%8E%E7%BB%99%E5%AE%9A%E7%9B%AE%E5%BD%95%E4%B8%AD%E9%9A%8F%E6%9C%BA%E9%80%89%E6%8B%A9%E4%B8%80%E9%83%A8%E5%88%86%E6%96%87%E4%BB%B6.png)
给定目录下大约有 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