Dê uma olhada nas man pages dos comandos shuf e xargs , isso pode ser o que você está procurando:
shuf -n [Number of files to move] -e [PATH to the files to be moved] | xargs -i mv {} [PATH to the dest]
pergunta simples e curta; é possível para mv mover um arquivo aleatório?
Eu sei que mv pode mover todos os arquivos com uma extensão específica usando mv *.extension , mas como sou bem novo no Ubuntu / Linux, não tenho certeza se mv pode fazer isso ou não.
Dê uma olhada nas man pages dos comandos shuf e xargs , isso pode ser o que você está procurando:
shuf -n [Number of files to move] -e [PATH to the files to be moved] | xargs -i mv {} [PATH to the dest]
Aqui está uma abordagem apenas de shell:
## Save all files in the array $files
files=(*)
## Get a random number between 0 (arrays start counting at 0) and the
## the number of files -1 (the last file in the array)
rand=-1
until (( $rand < ${#files[@]} && $rand >= 0 )); do rand=$RANDOM; done
## Move the file, renaming as necessary
mv "${files[$rand]}" newfilename
Você pode copiar / colar os itens acima diretamente no seu terminal.
Como alternativa, em Perl:
perl -le 'rename $ARGV[int(rand($#ARGV))],newfilename' *
A função rename simplesmente renomeia seu primeiro argumento como seu segundo: rename orifinal_file new_file . A função rand imprime um número fracionário aleatório entre 0 e o argumento fornecido. $#ARGV é o número de argumentos dados ao script, aqui, todos os arquivos (e subdiretórios) no diretório atual. Como rand retorna números fracionários, passamos por int() para obter um número inteiro. Portanto, int(rand($#ARGV)) escolhe aleatoriamente um dos índices no array @ARGS e, portanto, $ARGV[int(rand($#ARGV))] é um dos arquivos.