Renomeando arquivos de uma lista de nomes de arquivos

1

Eu ainda sou muito novo no shell de scripts, então tenho certeza de que esse comando é errado. Eu estou tentando renomear uma pasta de arquivos para os nomes em um arquivo txt. A pré-condição é que os arquivos de arquivos.txt e os arquivos na pasta já estejam organizados para corresponder à primeira linha ao primeiro arquivo no sistema. O que eu 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

    
por Drew 29.07.2014 / 16:30

2 respostas

1

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

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

    encontre. -name "* .mkv" > files.txt

  2. edite esse arquivo e adicione o novo nome depois do antigo em cada linha, por exemplo,

    ./ myfirst.mkv ./mynewfirst.mkv

  3. processe este arquivo:

    enquanto lê a linha; eval mv $ line; feito < files.txt

por 30.07.2014 / 11:31
0

Estou me inspirando aqui: link

Parece que você precisa repetir o arquivo e os arquivos no 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

Eu não sei se você tem o nome do diretório no arquivo filenames.txt , então você pode querer colocar um echo antes da linha mv para testar se isso vai fazer o que você quer.

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

    
por 14.08.2014 / 21:20