Mover arquivo aleatório usando o comando mv

2

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.

    
por realsub 31.03.2016 / 23:57

2 respostas

7

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]
    
por w1r3dh4ck3r 01.04.2016 / 00:11
1

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.

    
por terdon 01.04.2016 / 10:18