Renomeando arquivos de uma lista de nomes de arquivos

Renomeando arquivos de uma lista de nomes de arquivos

Ainda sou muito novo em scripts de shell, então tenho certeza de que esse comando está errado. Estou tentando renomear uma pasta de arquivos com os nomes de um arquivo txt. A pré-condição é que os nomes dos arquivos.txt e os arquivos na pasta já estejam organizados para corresponder a primeira linha ao primeiro arquivo no sistema. O que consegui foi:

while read line; do echo -e "$line\n" | for f in *mkv do mv f $1; done < filenames.txt

mas não funcionou. Vocês podem me ajudar a corrigir isso?

Obrigado

Responder1

Se você não possui nenhuma regra algorítmica para renomear os arquivos (ou seja, você realmente precisa de um arquivo como entrada), sugiro

  1. crie um arquivo txt da lista de arquivos que você deseja renomear, por exemplo:

    encontrar . -nome "*.mkv" > arquivos.txt

  2. edite este arquivo e adicione o novo nome após o antigo em cada linha, por exemplo

    ./meuprimeiro.mkv ./meunovoprimeiro.mkv

  3. processe este arquivo:

    enquanto lê a linha; faça avaliação mv $linha; concluído <arquivos.txt

Responder2

Estou me inspirando aqui:https://unix.stackexchange.com/a/26604

Parece que você precisa fazer um loop no arquivo e nos arquivos do diretório ao mesmo tempo:

DIR=./thefiledir
while : ; do
    read -r oldfile <&3
    read -r newfile <&4
    if [ -z "$oldfile" -o -z "$newfile" ]; then
        break
    fi
    mv $oldfile $newfile
done 3< <( find $DIR -maxdepth 1 -type f | sort ) 4< filenames.txt

Não sei se você tem o nome do diretório no filenames.txtarquivo, então você pode colocar um echoantes da mvlinha para testar se isso fará o que você deseja.

Além disso, posso tentar fazer isso de outra maneira ... Não tenho certeza de como você está gerando o arquivo com os novos nomes, mas como outra resposta sugere, você pode fazer um loop em um arquivo com nomes novos e antigos ou apenas ler os nomes e aplique alguma lógica para criar os novos nomes.

informação relacionada