从目录树中选择随机样本

从目录树中选择随机样本

我有一个目录,其中包含包含文件的目录的目录。我想从每个叶目录中随机选择两个文件。我发现这个关于从单个目录中进行选择的问题,但是在数百个目录中的每一个中运行它会很痛苦。

答案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 {} \;

这不一定是最高效的不过这样做的方法。 :)

相关内容