Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

1. Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

BRAINNER ROGER PIRES DA SILVA
brainnersilva

(usa CentOS)

Enviado em 14/04/2021 - 10:17h

Bom dia pessoal, estou com dificuldades para criar um script que consigo ler 2 arquivos txt com while e já renomei o arquivo na hora de copiar, vou exemplificar melhor:

Tenho um TXT = 1.txt , Nele contem o caminho onde o arquivo está em um ponto de montagem compartilhado de um windows, além de outros dados do arquivo separados por ;

Eu uso o comando cut, separo somente o caminho do arquivo vou lá e faço a copia para outra pasta.... até aqui ok funcionando!

na hora de copiar eu já queria renomear para o nome que estaria no arquivo 2.txt, esse arquivo 2.txt estaria na mesma ordem, porém com outro nome já preparado em cada linha para renomear..

Este script eu uso para fazer a copia!

#!/bin/bash

cut Lista.txt -d ";" -f1 >> listline.txt

while read listline; do
cp "$listline" /convert/temp;
done < listline.txt


no caso eu precisaria masi ou menos assim

#!/bin/bash

cut Lista.txt -d ";" -f1 >> listline.txt

while read listline; do
cp "$listline" /convert/temp/NOVONOME (baseado em uma lista 2;
done < listline.txt



  


2. Re: Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 14/04/2021 - 18:35h

Segue um exemplo abaixo, adapte-o para o seu contexto:

$ cat lista.txt 
A
B
C
D
E

$ cat nomes.txt
1a
2b
3c
4d
5e

$ cat script.sh
#!/bin/bash
while IFS= read -r lista && IFS= read -r nome <&3; do
echo "cp $lista $nome"
done <lista.txt 3<nomes.txt

$ ./script.sh
cp A 1a
cp B 2b
cp C 3c
cp D 4d
cp E 5e




3. Re: Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/04/2021 - 19:37h


brainnersilva escreveu:

Bom dia pessoal, estou com dificuldades para criar um script que consigo ler 2 arquivos txt com while e já renomei o arquivo na hora de copiar, vou exemplificar melhor:

Tenho um TXT = 1.txt , Nele contem o caminho onde o arquivo está em um ponto de montagem compartilhado de um windows, além de outros dados do arquivo separados por ;

Eu uso o comando cut, separo somente o caminho do arquivo vou lá e faço a copia para outra pasta.... até aqui ok funcionando!

na hora de copiar eu já queria renomear para o nome que estaria no arquivo 2.txt, esse arquivo 2.txt estaria na mesma ordem, porém com outro nome já preparado em cada linha para renomear..

Este script eu uso para fazer a copia!

#!/bin/bash

cut Lista.txt -d ";" -f1 >> listline.txt

while read listline; do
cp "$listline" /convert/temp;
done < listline.txt


no caso eu precisaria masi ou menos assim

#!/bin/bash

cut Lista.txt -d ";" -f1 >> listline.txt

while read listline; do
cp "$listline" /convert/temp/NOVONOME (baseado em uma lista 2);
done < listline.txt

Boa noite brainnersilva.
Segue sugestão:
#!/usr/bin/env bash
nlin=$(wc -l < lista01.txt);
N=1;

while (($N<${nlin}));do
nome01=$(awk -F";" 'NR=='$N'{print $1}' lista01.txt) #Pega o campo01 de cada linha, (com base na var $N) do arquivo "lista01.txt"
nome02=$(awk -F";" 'NR=='$N'{print $1}' lista02.txt) #Pega o campo01 de cada linha, (com base na var $N) do arquivo "lista02.txt"
echo -e "Linha: $N\nNome01:${nome01}\nNome02:${nome02}\n" #Só para mostrar as variáveis
#Aqui vai o comando cp
cp "${nome01}" /convert/temp/${nome02}
let N++;
done

Considerei que o arquivo 2, tem vários campos por linha, separados por ";"
se não for o caso, altere a linha que define a var nome02.
Caso tenha somente um campo, faça:
nome02=$(awk 'NR=='$N'{print $1' lista02.txt)


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________



4. Re: Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 14/04/2021 - 19:45h


Ryuk escreveu:

Segue um exemplo abaixo, adapte-o para o seu contexto:

$ cat lista.txt 
A
B
C
D
E

$ cat nomes.txt
1a
2b
3c
4d
5e

$ cat script.sh
#!/bin/bash
while IFS= read -r lista && IFS= read -r nome <&3; do
echo "cp $lista $nome"
done <lista.txt 3<nomes.txt

$ ./script.sh
cp A 1a
cp B 2b
cp C 3c
cp D 4d
cp E 5e



sem o while seria possível fazer
paste lista.txt nomes.txt | xargs -n 2 cp


5. Re: Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 15/04/2021 - 09:39h

leandropscardua escreveu:

sem o while seria possível fazer
paste lista.txt nomes.txt | xargs -n 2 cp


Gostei. Resolve num só comando, simples e direto.


6. Re: Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

BRAINNER ROGER PIRES DA SILVA
brainnersilva

(usa CentOS)

Enviado em 15/04/2021 - 14:29h

Agradeço imensamente a ajuda, não sei se fiz algo errado, porém quando executo ele não aparece nada na tela tenho dar CTRL+C para para e voltar pro prompt.

Mais uma vez muito obrigado a sugestao do outro colega deu certinho!


7. Re: Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

BRAINNER ROGER PIRES DA SILVA
brainnersilva

(usa CentOS)

Enviado em 15/04/2021 - 14:30h

Funcionou perfeitamente!
Gostei pois posso até criar um log...

Obrigado pela ajuda.


8. Copiar

BRAINNER ROGER PIRES DA SILVA
brainnersilva

(usa CentOS)

Enviado em 17/04/2021 - 09:30h

Ryuk escreveu:

leandropscardua escreveu:

sem o while seria possível fazer
paste lista.txt nomes.txt | xargs -n 2 cp


Gostei. Resolve num só comando, simples e direto.


Desculpa voltar o assunto, porém na hora de fazer o comando e renomear o arquivo ele gerou uma caracetere "?" no final de cada arquivo que renomeou...
Esses arquivos são arquivos compartilhados no Windows, se ele faz isso acaba tirando a extenção e par ao windows ele não reconhece mais o arquivo.


9. Re: Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 17/04/2021 - 10:08h

brainnersilva escreveu:

Ryuk escreveu:

leandropscardua escreveu:

sem o while seria possível fazer
paste lista.txt nomes.txt | xargs -n 2 cp


Gostei. Resolve num só comando, simples e direto.


Desculpa voltar o assunto, porém na hora de fazer o comando e renomear o arquivo ele gerou uma caracetere "?" no final de cada arquivo que renomeou...
Esses arquivos são arquivos compartilhados no Windows, se ele faz isso acaba tirando a extenção e par ao windows ele não reconhece mais o arquivo.


Testei aqui e funciona perfeitamente, não aparece nenhum "?".

Mostre exatamente o que fez. Copie o comando, o resultado, o conteúdo de "lista.txt" e "nomes.txt"... e cole aqui.


10. Re: Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

BRAINNER ROGER PIRES DA SILVA
brainnersilva

(usa CentOS)

Enviado em 17/04/2021 - 14:54h


Ryuk escreveu:

brainnersilva escreveu:

Ryuk escreveu:

leandropscardua escreveu:

sem o while seria possível fazer
paste lista.txt nomes.txt | xargs -n 2 cp


Gostei. Resolve num só comando, simples e direto.


Desculpa voltar o assunto, porém na hora de fazer o comando e renomear o arquivo ele gerou uma caracetere "?" no final de cada arquivo que renomeou...
Esses arquivos são arquivos compartilhados no Windows, se ele faz isso acaba tirando a extenção e par ao windows ele não reconhece mais o arquivo.


Testei aqui e funciona perfeitamente, não aparece nenhum "?".

Mostre exatamente o que fez. Copie o comando, o resultado, o conteúdo de "lista.txt" e "nomes.txt"... e cole aqui.


lista01.txt

767964_(2).jpg
767964_(3).jpg
767964_(4).jpg


lista02.txt

ASTERIX_PEDIDO_768899_767964_(2).jpg
ASTERIX_PEDIDO_768899_767964_(3).jpg
ASTERIX_PEDIDO_768899_767964_(4).jpg


RESULTADO

ASTERIX_PEDIDO_768899_767964_(2).jpg?
ASTERIX_PEDIDO_768899_767964_(3).jpg?
ASTERIX_PEDIDO_768899_767964_(4).jpg?


Não sei o que pode ser.


11. Re: Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 17/04/2021 - 18:26h

Simulei aqui com seus exemplos, e continua funcionando de boa. Nenhum erro.

$ paste lista01.txt lista02.txt | xargs -n 2 cp

'767964_(2).jpg'
'767964_(3).jpg'
'767964_(4).jpg'
'ASTERIX_PEDIDO_768899_767964_(2).jpg'
'ASTERIX_PEDIDO_768899_767964_(3).jpg'
'ASTERIX_PEDIDO_768899_767964_(4).jpg'


Não sei o que pode ser. Você tem que fornecer mais informações. Tem algum detalhe que você esqueceu de mencionar, só pode!

Já tentou de outra forma, com o script (while) sugerido nas respostas anteriores?


12. Re: Script para ler 2 arquivos txt e copiar o arquivo renomeando. [RESOLVIDO]

BRAINNER ROGER PIRES DA SILVA
brainnersilva

(usa CentOS)

Enviado em 17/04/2021 - 19:13h

Ryuk escreveu:

Simulei aqui com seus exemplos, e continua funcionando de boa. Nenhum erro.

$ paste lista01.txt lista02.txt | xargs -n 2 cp

'767964_(2).jpg'
'767964_(3).jpg'
'767964_(4).jpg'
'ASTERIX_PEDIDO_768899_767964_(2).jpg'
'ASTERIX_PEDIDO_768899_767964_(3).jpg'
'ASTERIX_PEDIDO_768899_767964_(4).jpg'


Não sei o que pode ser. Você tem que fornecer mais informações. Tem algum detalhe que você esqueceu de mencionar, só pode!

Já tentou de outra forma, com o script (while) sugerido nas respostas anteriores?




Testei sim e aparece da mesma forma, o unico detalhe e que uso um comando cut para formar a lista que sera usada para renomear os arquivos, a lista tem mais informações, eu pego só informaões que eu quero no cut usando um delimitador,.. se quiser posso te mandar por e-mail com os arquivos originais.



01 02