Usando lista de texto para renomear em lote arquivos

5

Suponha que eu tenha uma pasta com cerca de 20 arquivos (digamos, fotos que tirei em uma viagem) e quero renomeá-los de uma só vez, mas não há nenhuma expressão Perl específica que eu queira usar (por exemplo, se eu quiser adicionar texto adicional a cada nome que não faz parte dos metadados dos arquivos individuais, como descrições e / ou comentários).

E suponha que eu possa gerar mais facilmente um arquivo de texto com o que eu quero que o nome de cada arquivo seja (ou, se preferível, um tipo de lista 'antes e depois').

Existe alguma maneira de aplicar as alterações implícitas nessa lista de texto à pasta em questão?

    
por Jonathan Y. 10.07.2013 / 20:27

2 respostas

6

Isso parece um trabalho para xargs .

Se o seu arquivo estiver formatado assim:

old_file1 new_file1
old_file2 new_file2

você pode fazer xargs -a your_file -n 2 mv .

    
por Taymon 10.07.2013 / 20:34
3

Coloque o arquivo de lista file.list, com os novos nomes na ordem sequencial , com extensão, como file.list na pasta com arquivos a serem renomeados, por exemplo.

newname file x.jpg
newname file y.jpg
newname file z.jpg

Altere o diretório para o diretório de trabalho.

alterar a extensão no código , todos os arquivos com essa extensão serão renomeados em ordem seqüencial de acordo com a lista.

Um arquivo undo_rename.sh será criado na pasta inicial para desfazer, se necessário.

rm ~/undo_rename.sh; count=1; for name in *.ext; do echo "mv" '"''awk "NR==$count{print;exit}" file.list''"' '"'$name'"' >> ~/undo_rename.sh; chmod +x ~/undo_rename.sh; mv "$name" "'awk "NR==$count{print;exit}" file.list'"; ((count+=1)); done
    
por Vijay 23.03.2015 / 17:05