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
.
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?
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
.
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
Tags command-line batch-rename