![从目录树中选择随机样本](https://linux22.com/image/66015/%E4%BB%8E%E7%9B%AE%E5%BD%95%E6%A0%91%E4%B8%AD%E9%80%89%E6%8B%A9%E9%9A%8F%E6%9C%BA%E6%A0%B7%E6%9C%AC.png)
我有一个目录,其中包含包含文件的目录的目录。我想从每个叶目录中随机选择两个文件。我发现这个关于从单个目录中进行选择的问题,但是在数百个目录中的每一个中运行它会很痛苦。
答案1
使用固定深度的目录结构(根据您的描述,具有带文件的子子目录的目录),您可以执行以下操作:
for subsubdir in "$directory"/*/*/
do
find "$subsubdir" -type f | shuf -n 2
done | shuf
最后一个| shuf
假设是您希望列表作为一个整体随机化,而不是按目录排序。否则就扔掉它。
如果您希望文件名中出现换行符,则可以切换到以零结尾的文件列表。
答案2
你可以这样做:
find /some/dir -type d -not -empty -exec sh -c 'find "$1" -maxdepth 1 -type f | shuf -n 2' sh {} \;
这不一定是最高效的不过这样做的方法。 :)