Copie aleatoriamente certa quantidade de determinado tipo de arquivo de um diretório para outro

3

Às vezes eu tenho uma pasta cheia de jpg e eu preciso escolher aleatoriamente 8 ou mais deles. Como eu poderia automatizar isso para que minha conta escolhesse aleatoriamente 8 jpg's da pasta e copiasse eles para outro destino?

Minha pergunta é simples, em vez de usar cp e dar a ele um nome de arquivo e um nome de arquivo de destino, quero criar um script que escolha aleatoriamente 8 dos .jpgs na pasta e copie-os para outra pasta .

    
por David Provost 22.07.2015 / 21:42

3 respostas

9

Você pode usar shuf :

shuf -zn8 -e *.jpg | xargs -0 cp -vt target/
  • shuf embaralha a lista de *.jpg arquivos no diretório atual.
  • -z é terminar com zero cada linha, para que os arquivos com caracteres especiais sejam tratados corretamente.
  • -n8 exits shuf após 8 arquivos.
  • xargs -0 lê a entrada delimitada por um caractere nulo (de shuf -z ) e executa cp .
  • -v é imprimir cada cópia com detalhes.
  • -t é para especificar o diretório de destino.
por 22.07.2015 / 22:19
1

Você pode recuperar arquivos desta maneira:

files=(/tmp/*.jpg)
n=${#files[@]}
file_to_retrieve="${files[RANDOM % n]}"
cp $file_to_retrieve <destination>

faça um loop 8 vezes. Espero que ajude

    
por 22.07.2015 / 22:13
1

A melhor resposta não funcionou para mim, porque -e *.jpg não procura realmente no diretório de trabalho. É apenas uma expressão. Então shuf não embaralha nada ...

Encontrei a seguinte melhoria com base no que aprendi nesse post.

find /some/dir/ -type f -name "*.jpg" -print0 | xargs -0 shuf -e -n 8 -z | xargs -0 cp -vt /target/dir/

Espero que ajude alguém.

    
por 17.12.2017 / 14:24