Como copiar um arquivo várias vezes em caminhos escolhidos aleatoriamente dentro do sistema de arquivos?

5

Eu tenho um sistema de arquivos e um arquivo especial foo. Eu gostaria que o script escolhesse várias vezes (5,10 ou 100) caminhos aleatórios para pastas dentro desse sistema de arquivos e para copiar o arquivo foo em cada um deles.

Eu tenho uma ideia, mas não o suficiente para criar um roteiro real e não sei se a idéia faz sentido do ponto de vista do desempenho.

   idea in pseudo-script:

    read into variable n how many random paths should be found
    file / -type d > file  # put all existing directory paths into a file
    repeat n-times{
    choose_random_line<file | xargsintosecondargument cp foo 
   /* chose a random line from file and use it as second argument of copy
    command, first is foo. */
    }
    
por Abdul Al Hazred 29.03.2015 / 23:08

1 resposta

9

Em um sistema GNU:

find / -type d -print0 | shuf -zn5 | xargs -r0n1 cp foo

(agora copiar o arquivo para coisas como / sys ou / proc não faria sentido ou mesmo seria possível, você pode querer adicionar -xdev para selecionar apenas diretórios no sistema de arquivos montado em / ).

Você pode torná-lo compatível com o FreeBSD e o GNU com:

find / -type d -print0 | sort -zR | tr '
find / -type d -print0 | shuf -zn5 | xargs -r0n1 cp foo
\n' '\n
find / -type d -print0 | sort -zR | tr '%pre%\n' '\n%pre%' | head -n5 |
  tr '%pre%\n' '\n%pre%' | xargs -r0n1 cp foo
' | head -n5 | tr '%pre%\n' '\n%pre%' | xargs -r0n1 cp foo
    
por 29.03.2015 / 23:23