1. Renomear sequencia de arquivos 001, 002, ..., 011 para 001F, 001V, ...006F [RESOLVIDO]
wandersonbcusa Ubuntu
Post recolhido
Enviado em 17/05/2016 - 14:53h
Boa tarde pessoal,
Estou precisando automatizar uma quebra de arquivos tiff multi-paginas para paginas separadas, estou utilizando o comando convert do pacote ImageMagick, e ele cria as paginas sequencialmente.
Ex.: arquivoTIFF22.tif para arquivoTiff22_001.tif, arquivoTiff22_002.tif..., arquivoTiff22_011.tiff
Mas para atender um layout pré-especifico, preciso renomear de forma que a imagem 1 seja a frente, ou seja arquivoTiff22_001F.tif e a imagem 2 seja o verso: arquivoTiff22_001V.tif, e assim sucessivamente.
Alguém poderia dar uma dica para renomear este lote de arquivo, ou talvez saiba se existe alguma opção no comando convert que o faça?
Obrigado.
Eu quase consegui algo, mas esta dando um erro em uma variável que não esta limpando durante o laço, vou mostrar até onde consegui chegar (por favor não reparem na bagunça do noob rsrs):
#!/bin/bash
for arquivoTIF_ORIG in $HOME/*.tif; do #encontro as matriculas já desmembradas: 0001234_00001.tif 0001234_00002.tif 0001234_00003.tif, ...
matricula=$(echo $arquivoTIF_ORIG | cut -d'_' -f1) #filtro a matricula: 0001234_00001.tif vira 0001234
pagina=$(echo $arquivoTIF_ORIG | cut -d'_' -f2 | cut -d'.' -f1) #filtro apenas a pagina: 0001234_00001.tif vira 00001
modpagina=$(echo "${pagina}%2" | bc) # guardo o módulo da divisão da pagina
if [ "$modpagina" = 0 ];then #se fo par, então é o verso
pagina="$(echo $pagina/2 | bc)" #divido por a pagina por 2 e guardo (1 divido por 2 vai retornar 1 neste caso)
arquivoTIF_FINAL=${matricula}_$(seq -f "%05g" $pagina)V.tif #monto o nome final do arquivo, o seq -f esta ai apenas para manter o layout de 5 strings no nome.
echo $arquivoTIF_ORIG $arquivoTIF_FINAL #apenas para ver o resultado
elif [ "$modpagina" = 1 ];then #se for impar, é frente (minha contagem começa do 1 e não zero)
pagina="$(echo $pagina/2 + $modpagina | bc)" #divido a pagina por 2 e somo 1
arquivoTIF_FINAL=${matricula}_$(seq -f "%05g" $pagina)F.tif
echo $arquivoTIF_ORIG $arquivoTIF_FINAL
fi
done
No primeiro laço deu certo, mas nos laços seguintes a variável $pagina ou a variável $matricula esta concatenando com os valores anteriores.
Veja a saída:
0001234_00001.tif 0001234_00001F.tif <---- aqui foi sucesso!
0001234_00002.tif 0001234_00001V.tif <---- aqui também!
0001234_00003.tif 0001234_00001 00002F.tif <--- daqui para baixo desandou
0001234_00004.tif 0001234_00001 00002V.tif
0001234_00005.tif 0001234_00001 00002 00003F.tif
0001234_00006.tif 0001234_00001 00002 00003V.tif
Bom dia, wandersonbc.
Agora (parece) que entendi . . .
E mais simples, não precisa saber se é PAR ou IMPAR.
Apenas "DUPLICAR" a ENTRADA, colocando o "F ou V" na SAíDA . Se, o que você precisa é:
Se, a resposta foi satisfatória, resolveu seu problema e te ajudou. . .
Marque-a como "a MELHOR", assim ganho uns pontos, o que incentiva a continuar colaborando . . . Rsrsrsr
Abç.:
Marcelo Oliver
3. Re: Renomear sequencia de arquivos 001, 002, ..., 011 para 001F, 001V, ...006F [RESOLVIDO]
removidousa Nenhuma
Post recolhido
Enviado em 17/05/2016 - 14:59h
Não é difícil. Mas para saber sobre o contador que irá colocar os números de sequência nos arquivos está faltando saber quantos arquivos há no total e se há mais algum padrão a ser criado nos nomes dos arquivos. Com um for {} resolve.
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden
4. Re: Renomear sequencia de arquivos 001, 002, ..., 011 para 001F, 001V, ...006F
wandersonbcusa Ubuntu
Post recolhido
Enviado em 17/05/2016 - 15:15h
listeiro_037 escreveu:
Não é difícil. Mas para saber sobre o contador que irá colocar os números de sequência nos arquivos está faltando saber quantos arquivos há no total e se há mais algum padrão a ser criado nos nomes dos arquivos. Com um for {} resolve.
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden
Opa, tranquilo Listeiro?
na pasta onde onde vou pegar os arquivos originais, vai ser aleatório, cada hora vai ter quantidade de arquivos diferentes e com numeração diferente, porem o tamanho de string terá layout de nome fixo: 7 posições de caracteres, + a extensão ".tif",
ex.: 0001234.tif imagine que este arquivo tem 5 paginas dentro, hoje eu consigo a seguinte saída:
0001234_00001.tif
0001234_00002.tif
0001234_00003.tif
0001234_00004.tif
0001234_00005.tif
só que preciso que seja:
0001234_00001F.tif
0001234_00001V.tif
0001234_00002F.tif
0001234_00002V.tif
0001234_00005F.tif
Hoje, no meus script eu faço um for e assim que divido/renomeio um arquivo tiff, eu ja movo para outra pasta.
5. Re: Renomear sequencia de arquivos 001, 002, ..., 011 para 001F, 001V, ...006F [RESOLVIDO]
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden
6. Re: Renomear sequencia de arquivos 001, 002, ..., 011 para 001F, 001V, ...006F
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden
Opa Listeiro, o script é bem extenso pois faz muitas outras automações juntas, mas a parte que eu acho que nos interessa é esta:
for arquivoTIF_ORIG in $SOURCE/*.tif; do arquivoTIF_FINAL=$(/usr/bin/seq -f "%07g" $(/usr/bin/basename $arquivoTIF_ORIG .tif) $(/usr/bin/basename $arquivoTIF_ORIG .tif)); convert $arquivoTIF_ORIG $HOME/${arquivoTIF_FINAL}_%05d.tif; rm $arquivoTIF_ORIG; done
ele pegar tudo que esta na pasta $SOURCE com extensão tif (aqui apenas terá extensão tif de qualquer forma, foi apenas para reforçar) e guarda o novo nome do arquivo como layout de 7 caracteres (seq -f "%07g") e depois chama o comando converte que divide o arquivo renomeando, passando o novo nome do arquivo (convert $ORIGINAL.tif para $NOVONOME_%05.tif que fica 0001234_00001.tif , 0001234_00002.tif, ...)
Garrei nesta parte para fazer o frente e verso das paginas. Estava pensando em tentar fazer um modulo, mas ainda não tive uma boa ideia.
7. Re: Renomear sequencia de arquivos 001, 002, ..., 011 para 001F, 001V, ...006F [RESOLVIDO]
msoliverusa Debian
Post recolhido
Enviado em 17/05/2016 - 17:31h
wandersonbc escreveu:
Boa tarde pessoal,
Estou precisando automatizar uma quebra de arquivos tiff multi-paginas para paginas separadas, estou utilizando o comando convert do pacote ImageMagick, e ele cria as paginas sequencialmente.
Ex.: arquivoTIFF22.tif para arquivoTiff22_001.tif, arquivoTiff22_002.tif..., arquivoTiff22_011.tiff
Mas para atender um layout pré-especifico, preciso renomear de forma que a imagem 1 seja a frente, ou seja arquivoTiff22_001F.tif e a imagem 2 seja o verso: arquivoTiff22_001V.tif, e assim sucessivamente.
Alguém poderia dar uma dica para renomear este lote de arquivo, ou talvez saiba se existe alguma opção no comando convert que o faça?
Obrigado.
Boa tarde wandersonbc.
Os pares FRENTE e os impares VERSO, é isso?
att
marcelo oliver
8. Re: Renomear sequencia de arquivos 001, 002, ..., 011 para 001F, 001V, ...006F
wandersonbcusa Ubuntu
Post recolhido
Enviado em 17/05/2016 - 17:54h
Boa tarde wandersonbc.
Os pares FRENTE e os impares VERSO, é isso?
att
marcelo oliver
Ola Marcelo,
Seria o inverso, impares FRENTE e pares VERSO, mas você conseguiu se expressar melhor que eu!
9. Re: Renomear sequencia de arquivos 001, 002, ..., 011 para 001F, 001V, ...006F [RESOLVIDO]
msoliverusa Debian
Post recolhido
Enviado em 17/05/2016 - 18:41h
wandersonbc escreveu:
Boa tarde wandersonbc.
Os pares FRENTE e os impares VERSO, é isso?
att
marcelo oliver
Ola Marcelo,
Seria o inverso, impares FRENTE e pares VERSO, mas você conseguiu se expressar melhor que eu!
Inverti tudo .... rsrsrrs
Segue uma sugestão, gera o numero, verifica se é PAR ou IMPAR.....
Eu quase consegui algo, mas esta dando um erro em uma variável que não esta limpando durante o laço, vou mostrar até onde consegui chegar (por favor não reparem na bagunça do noob rsrs):
#!/bin/bash
for arquivoTIF_ORIG in $HOME/*.tif; do #encontro as matriculas já desmembradas: 0001234_00001.tif 0001234_00002.tif 0001234_00003.tif, ...
matricula=$(echo $arquivoTIF_ORIG | cut -d'_' -f1) #filtro a matricula: 0001234_00001.tif vira 0001234
pagina=$(echo $arquivoTIF_ORIG | cut -d'_' -f2 | cut -d'.' -f1) #filtro apenas a pagina: 0001234_00001.tif vira 00001
modpagina=$(echo "${pagina}%2" | bc) # guardo o módulo da divisão da pagina
if [ "$modpagina" = 0 ];then #se fo par, então é o verso
pagina="$(echo $pagina/2 | bc)" #divido por a pagina por 2 e guardo (1 divido por 2 vai retornar 1 neste caso)
arquivoTIF_FINAL=${matricula}_$(seq -f "%05g" $pagina)V.tif #monto o nome final do arquivo, o seq -f esta ai apenas para manter o layout de 5 strings no nome.
echo $arquivoTIF_ORIG $arquivoTIF_FINAL #apenas para ver o resultado
elif [ "$modpagina" = 1 ];then #se for impar, é frente (minha contagem começa do 1 e não zero)
pagina="$(echo $pagina/2 + $modpagina | bc)" #divido a pagina por 2 e somo 1
arquivoTIF_FINAL=${matricula}_$(seq -f "%05g" $pagina)F.tif
echo $arquivoTIF_ORIG $arquivoTIF_FINAL
fi
done
No primeiro laço deu certo, mas nos laços seguintes a variável $pagina ou a variável $matricula esta concatenando com os valores anteriores.
Veja a saída:
0001234_00001.tif 0001234_00001F.tif <---- aqui foi sucesso!
0001234_00002.tif 0001234_00001V.tif <---- aqui também!
0001234_00003.tif 0001234_00001 00002F.tif <--- daqui para baixo desandou
0001234_00004.tif 0001234_00001 00002V.tif
0001234_00005.tif 0001234_00001 00002 00003F.tif
0001234_00006.tif 0001234_00001 00002 00003V.tif
11. Re: Renomear sequencia de arquivos 001, 002, ..., 011 para 001F, 001V, ...006F [RESOLVIDO]
wandersonbcusa Ubuntu
Post recolhido
Enviado em 19/05/2016 - 15:54h
msoliver escreveu:
Bom dia, wandersonbc.
Agora (parece) que entendi . . .
E mais simples, não precisa saber se é PAR ou IMPAR.
Apenas "DUPLICAR" a ENTRADA, colocando o "F ou V" na SAíDA . Se, o que você precisa é:
Se, a resposta foi satisfatória, resolveu seu problema e te ajudou. . .
Marque-a como "a MELHOR", assim ganho uns pontos, o que incentiva a continuar colaborando . . . Rsrsrsr
Abç.:
Marcelo Oliver
Marcelo, valeu demais pela ajuda e presteza, infelizmente seu script não gerou o resultado que eu queria, pois se na entrada eu tenho 10 arquivos tifs com numeração em sequencia de 1 a 10, na minha saída com frente e verso eu deveria ter uma sequencia final de 1 a 5 (pois como vou ter 1Frente e 1Verso, a quantidade de arquivos é a mesma mas a numeração fica reduzida pela metade).
Com uma solução nada elegante, consegui o resultado que queria:
No meu ultimo código cometi um pequeno mas irritante erro: no comando seq, delimitei inicio mas não o fim da contagem para gerar o contador do nome do arquivo.
Ficou assim no final:
for arquivoTIF_ORIG in $TEMP/*.tif; do
matricula=$(echo $arquivoTIF_ORIG | /usr/bin/cut -d'_' -f2)
pagina=$(echo $arquivoTIF_ORIG | /usr/bin/cut -d'_' -f3 | /usr/bin/cut -d'.' -f1)
modpagina=$(echo "${pagina}%2" | /usr/bin/bc)
if [ "$modpagina" = 0 ];then
pagina="$(echo $pagina/2 | /usr/bin/bc)"
arquivoTIF_FINAL="$DESTINO/${matricula}_$(/usr/bin/seq -f "%05g" $pagina $pagina)V.tif" # <=== aqui foi o erro, esqueci de repetir o segundo $pagina que faz com que o seq comece uma sequencia de numeração, mas pare nela mesmo, usei isto apenas para manter o layout de 5 strings na numeração da pagina.
/bin/mv ${arquivoTIF_ORIG} ${arquivoTIF_FINAL}
elif [ "$modpagina" = 1 ];then
pagina="$(echo $pagina/2 + $modpagina | /usr/bin/bc)"
arquivoTIF_FINAL=$DESTINO/${matricula}_$(/usr/bin/seq -f "%05g" $pagina $pagina)F.tif
/bin/mv ${arquivoTIF_ORIG} ${arquivoTIF_FINAL}
fi
Onde:
na pasta $TEMP terá os arquivos: _______________Na pasta $DESTINO eu terei:
0121204_00001.tif_______________________________0121204_00001F.tif
0121204_00002.tif_______________________________0121204_00001V.tif
0121204_00003.tif_______________________________0121204_00002F.tif
0121204_00004.tif_______________________________0121204_00002V.tif
0121204_00005.tif_______________________________0121204_00003F.tif
0121204_00006.tif_______________________________0121204_00003V.tif
0121204_00007.tif_______________________________0121204_00004F.tif
0121204_00008.tif_______________________________0121204_00004V.tif
0121204_00009.tif_______________________________0121204_00005F.tif
0121204_00010.tif_______________________________0121204_00005V.tif
0121204_00011.tif_______________________________0121204_00006F.tif
Vou estudar melhor a sua dica, pois além de mais simples parece ser muito mais eficiente.
Agradeço a todos pela ajuda. Até mais.
12. Re: Renomear sequencia de arquivos 001, 002, ..., 011 para 001F, 001V, ...006F [RESOLVIDO]
msoliverusa Debian
Post recolhido
Enviado em 19/05/2016 - 21:47h
wandersonbc escreveu:
msoliver escreveu:
Bom dia, wandersonbc.
Agora (parece) que entendi . . .
E mais simples, não precisa saber se é PAR ou IMPAR.
Apenas "DUPLICAR" a ENTRADA, colocando o "F ou V" na SAíDA . Se, o que você precisa é:
Se, a resposta foi satisfatória, resolveu seu problema e te ajudou. . .
Marque-a como "a MELHOR", assim ganho uns pontos, o que incentiva a continuar colaborando . . . Rsrsrsr
Abç.:
Marcelo Oliver
Marcelo, valeu demais pela ajuda e presteza, infelizmente seu script não gerou o resultado que eu queria, pois se na entrada eu tenho 10 arquivos tifs com numeração em sequencia de 1 a 10, na minha saída com frente e verso eu deveria ter uma sequencia final de 1 a 5 (pois como vou ter 1Frente e 1Verso, a quantidade de arquivos é a mesma mas a numeração fica reduzida pela metade).
Com uma solução nada elegante, consegui o resultado que queria:
No meu ultimo código cometi um pequeno mas irritante erro: no comando seq, delimitei inicio mas não o fim da contagem para gerar o contador do nome do arquivo.
Ficou assim no final:
for arquivoTIF_ORIG in $TEMP/*.tif; do
matricula=$(echo $arquivoTIF_ORIG | /usr/bin/cut -d'_' -f2)
pagina=$(echo $arquivoTIF_ORIG | /usr/bin/cut -d'_' -f3 | /usr/bin/cut -d'.' -f1)
modpagina=$(echo "${pagina}%2" | /usr/bin/bc)
if [ "$modpagina" = 0 ];then
pagina="$(echo $pagina/2 | /usr/bin/bc)"
arquivoTIF_FINAL="$DESTINO/${matricula}_$(/usr/bin/seq -f "%05g" $pagina $pagina)V.tif" # <=== aqui foi o erro, esqueci de repetir o segundo $pagina que faz com que o seq comece uma sequencia de numeração, mas pare nela mesmo, usei isto apenas para manter o layout de 5 strings na numeração da pagina.
/bin/mv ${arquivoTIF_ORIG} ${arquivoTIF_FINAL}
elif [ "$modpagina" = 1 ];then
pagina="$(echo $pagina/2 + $modpagina | /usr/bin/bc)"
arquivoTIF_FINAL=$DESTINO/${matricula}_$(/usr/bin/seq -f "%05g" $pagina $pagina)F.tif
/bin/mv ${arquivoTIF_ORIG} ${arquivoTIF_FINAL}
fi
Onde:
na pasta $TEMP terá os arquivos: _______________Na pasta $DESTINO eu terei:
0121204_00001.tif_______________________________0121204_00001F.tif
0121204_00002.tif_______________________________0121204_00001V.tif
0121204_00003.tif_______________________________0121204_00002F.tif
0121204_00004.tif_______________________________0121204_00002V.tif
0121204_00005.tif_______________________________0121204_00003F.tif
0121204_00006.tif_______________________________0121204_00003V.tif
0121204_00007.tif_______________________________0121204_00004F.tif
0121204_00008.tif_______________________________0121204_00004V.tif
0121204_00009.tif_______________________________0121204_00005F.tif
0121204_00010.tif_______________________________0121204_00005V.tif
0121204_00011.tif_______________________________0121204_00006F.tif
Vou estudar melhor a sua dica, pois além de mais simples parece ser muito mais eficiente.
Agradeço a todos pela ajuda. Até mais.
----------------------------------------------------------------------------------------------------------------
Boa noite, wandersonbc.
Desculpe o erro de interpretação . . .
Agora vai . . .