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.