ディレクトリツリーからランダムサンプルを選択する

ディレクトリツリーからランダムサンプルを選択する

ファイルを含むディレクトリを含むディレクトリがあります。各リーフディレクトリで2つのファイルをランダムに選択したいと思います。私が見つけた単一のディレクトリから選択することに関するこの質問しかし、何百ものディレクトリのそれぞれでそれを実行するのは痛いでしょう。

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

これが必ずしも最も多いわけではない効率的なしかしそれをする方法。 :)

関連情報