
Eu tenho uma pasta com cerca de 7.000 arquivos e cada arquivo é numerado, por exemplo, 74857.mkv 74858.mkv etc.
Eu também tenho um arquivo de texto que contém todos os números e nomes de arquivos:
Nesta ordem:
Gostaria de renomear cada arquivo do seu número para o seu nome; um exemplo:
74857.mkv > Tirada S01 E01.mkv
74858.mkv > Tirada S01 E02.mkv
Qualquer comando para fazer isso, por favor, tenho feito manualmente e só consegui fazer 50 arquivos em 5 dias!
Responder1
Assumindo que"é um exemplo de nome"é a string na linha imediatamente acima do .mkv
nome do arquivo atual, ou seja, aquele dado
$ cat file.txt
Taken S01 E01
74857.mkv
Taken S01 E02
74858.mkv
você realmente quer
74857.mkv > Tirada S01 E01.mkv
74858.mkv > Tirada S01 E02.mkv
então com GNU parallel
e mv
:
parallel -N2 echo mv -- {2} {1}.mkv < file.txt
Remova o echo
quando estiver satisfeito por ele estar compondo os comandos corretos.
Responder2
Eu faria isso em pequenos lotes e testaria com uma cópia se fosse você, mas algo assim deveria servir para você
while read n; do read f; mv $f "$n.${f##*.}"; done < file
Antes de começar, é aconselhável verificar a saída de
while read n; do read f; echo mv $f "$n.${f##*.}"; done < file > checkfile
Para ter certeza de que não há erros na renomeação do arquivo.
Mais seguro se você tiver espaço e tempo para copiar e manter seus originais seguros até que você esteja satisfeito....
while read n; do read f; cp $f "/a/safe/location/$n.${f##*.}"; done < file
Observação
Para reverter o processo basta inverter a ordem dos nomes no mv
comando
mv "$n.${f##*.}" $f
Responder3
Com perl
:
perl -lne '$dst = "$_.mkv"; $src = <>; chomp $src; rename $src, $dst
or warn "$src -> $dst: $!\n"' your-file
Com zsh
:
zmodload zsh/files # to get a builtin mv
while IFS= read -ru3 dst && IFS= read -ru3 src; do
mv -- "$src" "$dst.mkv"
done 3< your-file