Selecionando uma amostra aleatória de uma árvore de diretórios

2

Eu tenho um diretório que contém diretórios que contêm diretórios que contêm arquivos. Gostaria de selecionar dois arquivos aleatoriamente de cada diretório de folhas. Eu encontrei essa pergunta sobre como selecionar de um único diretório , mas executá-lo em cada uma das várias centenas de diretórios seria uma dor.

    
por Mark 01.06.2015 / 02:07

2 respostas

3

Com uma profundidade fixa da estrutura de diretórios (por sua descrição, um diretório com subdiretórios com arquivos), você poderia fazer algo como:

for subsubdir in "$directory"/*/*/
do
    find "$subsubdir" -type f | shuf -n 2
done | shuf

O% final% co_de na suposição de que você deseja que a lista seja randomizada como um todo e não classificada por diretório. Caso contrário, basta soltá-lo.

Se você espera novas linhas nos seus nomes de arquivos, pode alternar para a lista de arquivos com terminação zero.

    
por 01.06.2015 / 02:41
1

Você pode fazer assim:

find /some/dir -type d -not -empty -exec sh -c 'find "$1" -maxdepth 1 -type f | shuf -n 2' sh {} \;

Isso não é necessariamente a maneira mais eficiente de fazer isso. :)

    
por 01.06.2015 / 09:07