Renomeando arquivos com o auxílio de um arquivo de texto [closed]

0

Estou tentando renomear uma carga de arquivos, mas não sei como incorporar o uso de um arquivo de texto aos novos nomes.

Eu tenho um número de arquivos de vídeo que eu quero renomear, usando uma nova lista em um arquivo de texto. por exemplo.

dfhjkg.avi
wyrtrr.avi
jtylktmn.avi
ertjnn.avi

Para ser renomeado por novos nomes de arquivos em outro arquivo de texto:

File_01_01.avi
File_01_02.avi
File_01_03.avi
File_01_04.avi 

Estou usando o Kubuntu 12.04.

    
por user302394 22.02.2014 / 17:53

3 respostas

2

Emacs vem com um ótimo recurso chamado dired , permite listar arquivos em um determinado diretório, editá-los e, em seguida, enviar as alterações para o disco.

Você precisa:

  1. inicie o Emacs;

  2. pressione C-x d para navegar no diretório desejado;

  3. pressione C-x C-q para ativar o editor;

  4. edite os nomes dos arquivos usando todos os recursos que você gosta: localizar / substituir, editar o modo de coluna, etc;;

  5. quando terminar, pressione C-c C-c para salvar suas alterações.

Alternativamente, você pode dar Massren uma tentativa (não o fiz), deve ser uma espécie de dired independente.

    
por 23.02.2014 / 21:08
1

Eu usei renameutils , especificamente o comando " qmv " que vem nesse pacote, exatamente para esse tipo de coisa há anos.

Por padrão, " qmv " mostra cada nome de arquivo duas vezes em cada linha, e você só quer modificar a segunda ocorrência do nome do arquivo. Isso é para que você sempre possa ver o nome do arquivo original. No entanto, isso pode ser problemático com nomes extensos de arquivos que causam quebra de linha no editor, então eu tenho esse apelido:

alias qqmv="qmv -fdo"

A opção " -f " altera o formato que o qmv usa nos arquivos de texto, e o " do " é a especificação do formato que basicamente diz apenas para listar nomes de arquivos uma vez.

    
por 23.02.2014 / 21:19
0

Digamos que você tenha dois arquivos, old.txt e new.txt , cada um contendo uma linha por arquivo que precisa ser renomeada. Então você pode simplesmente ligar:

paste old.txt new.txt | while IFS=$'\t' read -r old new; do 
  mv -i -- "$old" "$new"
done

Isso só funcionará se os nomes dos arquivos não contiverem novas linhas ou guias. Então você cria um arquivo chamado old.txt com:

dfhjkg.avi
wyrtrr.avi
jtylktmn.avi
ertjnn.avi

e new.txt com:

File_01_01.avi
File_01_02.avi
File_01_03.avi
File_01_04.avi 

Em seguida, execute o script acima. No seu caso, ele ligaria:

mv -- dfhjkg.avi File_01_01.avi
mv -- wyrtrr.avi File_01_02.avi
mv -- jtylktmn.avi File_01_03.avi
mv -- ertjnn.avi File_01_04.avi

… mas mv ainda solicitará sua confirmação se houver arquivos que serão sobrescritos. Use echo mv … para imprimir o comando em vez de executá-lo.

    
por 23.02.2014 / 19:39