Como posso pré-escrever uma letra / número aleatório no início de cada nome de arquivo?

1

Estou trabalhando em um sistema no qual gostaria que a primeira letra de cada nome de arquivo fosse aleatória - não necessariamente exclusiva , apenas aleatória. Gostaria de poder executar isso a partir de um cron job.

Por exemplo, eu seria capaz de apontá-lo em uma lista de arquivos como

song.mp3    song1.mp3    song2.mp3
song3.mp3   song4.mp3    song5.mp3

E altere os nomes dos arquivos para algo assim:

a song.mp3    g song1.mp3    k song2.mp3
r song3.mp3   l song4.mp3    e song5.mp3

Existe uma maneira de fazer isso?

    
por Undo 08.12.2013 / 16:46

3 respostas

3

Veja este script. Eu tentei exatamente o que você queria.

#!/bin/bash

for item in *.mp3
do
    mv "$item" "$(cat /dev/urandom | tr -cd 'a-z' | head -c 1) $item"
done

Como as letras aleatórias são recolhidas

Aqui estou pegando strings de /dev/urandom e excluindo todos os caracteres que não estão entre [a-z] e, finalmente, mantendo apenas a primeira letra.

Como usar

Copie o código para um arquivo, digamos rename_song.sh , conceda a ele permissão de execução usando o terminal da seguinte forma,

chmod +x /path/to/rename_song.sh

Copie rename_song.sh para o diretório em que você tem .mp3 arquivos. execute o script a partir do terminal (primeiro navegue até o diretório onde você tem .mp3 files) como,

./rename_song.sh

Se você tem uma lista de arquivos como

song.mp3    song1.mp3    song2.mp3
song3.mp3   song4.mp3    song5.mp3

Eles serão renomeados assim:

a song.mp3    g song1.mp3    k song2.mp3
r song3.mp3   P song4.mp3    A song5.mp3

Se você quiser letras e números, substitua tr -cd 'a-z' por tr -cd 'a-z0-9' e é sempre melhor usar um simples shell glob em vez de analisar a saída de ls .

    
por souravc 08.12.2013 / 18:45
3

Você pode usar a variável env $ RANDOM:

#!/bin/bash
for F in *.mp3 ; do
    mv $F $RANDOM.$F
done

Que moverá arquivos:

songa.mp3
song7.mp3

para

1875.songa.mp3
32654.song7.mp3

por exemplo.

    
por Joseph Santaniello 08.12.2013 / 17:07
1

Aqui estão as versões de uma linha do script do @ Joseph, para que você possa colá-lo no terminal:

Primeiro, mude para o diretório desejado:

cd /PATH/TO/DIRECTORY/

e depois você pode executar o comando diretamente do terminal:

for F in $(ls *.mp3); do mv "$F" "$RANDOM.$F" ;  done;

e uma versão mais curta seria:

for F in *.mp3 ; do mv "$F" "$RANDOM.$F" ; done

Também posso observar que, de qualquer forma, eles só farão números aleatórios no começo.

    
por Wilf 08.12.2013 / 18:34