Como renomear um arquivo com um nome conhecido para um novo nome que está armazenado em uma variável?

Como renomear um arquivo com um nome conhecido para um novo nome que está armazenado em uma variável?

[ATUALIZAÇÃO-1]:Se possível, dê-me contras de motivação para aprender os comandos mais simples.


Então, eu tenho um arquivo no diretório:

ls | grep *.mp4 

vídeo.mp4

Eu uso este comando para renomear e mover arquivos aleatoriamente em outro diretório:

for a in *.mp4; do mv -n "$a" "${a/*/$RANDOM.mp4}"; done;  mv *.mp4 /home/misdeed/Documents

Tudo bem, recebo um nome aleatório para video.mp4

cd Documents; ls | grep *.mp4

19889.mp4

Pergunta:

Como usar é:

a="This is name file"
echo $a

Este é o arquivo de nome

para renomear *.mp4 (não aleatoriamente) e para obter

Este é o nome do arquivo.mp4


Eu preciso de algo assim:

  • a="This is name file"
  • COMMAND FOR RENAME BUT WITHOUT $RANDOM. I WANT USE $a in renamed file

Responder1

Digamos que o nome original seja conhecido antecipadamente e seja video.mp4. Você renomeia com

mv video.mp4 "$a".mp4

Notas:

  • Se a variável estiver vazia (ou não definida), o nome final será .mp4. Nomes que começam com ponto ( .) ficam "ocultos", simplesmente lsos ignora, você precisa ls -avê-los.
  • Se já existir um arquivo com o nome de destino, ele será perdido e o video.mp4arquivo anterior receberá o seu nome. Para evitar contratempos, considere mv -i; ele solicitará confirmação se o caminho de destino existir.

Responder2

Presumo que você queira que o novo nome de arquivo aleatório seja impresso. Nesse caso, o mais fácil é reutilizar o valor da sua variável aleatória.

for file in *.mp4; do
  RANDOM_NAME="${file/*/$RANDOM.mp4}";
  mv -n "$file" /home/misdeed/Documents/"$RANDOM_NAME";
  echo "This is name $RANDOM_NAME.mp4";
done

informação relacionada