Seleciona aleatoriamente uma proporção de arquivos de um determinado diretório [duplicado]

0

Existem cerca de 10000 arquivos em um determinado diretório. Existe algum comando que possa me ajudar a escolher aleatoriamente 1000 arquivos e colocá-los em outro diretório. Os arquivos selecionados devem ser removidos do diretório original.

    
por user297850 05.09.2016 / 01:09

1 resposta

3

Se você tiver shuf , ele permitirá que você faça o que quiser, desde que nenhum nome de arquivo tenha um caractere de nova linha e não haja subdiretórios:

mapfile -t sample < <(shuf -n 1000 -e given_directory/*)
mv "${sample[@]}" other_directory

Se houver subdiretórios, você poderá obter a lista de arquivos usando find em vez do glob. Ou você pode oversample e filtrar. find também ajudará você a lidar com arquivos que poderiam ter novas linhas em seus nomes (o que é realmente uma má ideia, mas isso não significa necessariamente que você possa ignorar a possibilidade), pois você pode usar a ação -print0 combinada com o sinal -z para shuf . Por exemplo,

find given_directory -type f -print0 |
shuf -z -n 1000 |
xargs -0 mv -t other_directory

mv -t é uma extensão do Gnu (muito útil) que permite fornecer o diretório de destino no início da linha de comando, que funciona bem com o modelo xargs / find -exec de colocar vários argumentos no final de a linha de comando.

    
por 05.09.2016 / 01:14