shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 2 laços em paralelo (seria isso?)


From: Cristiano
Subject: Re: 2 laços em paralelo (seria isso?)
Date: Wed, 07 Apr 2010 14:46:19 -0000
User-agent: eGroups-EW/0.82

--- Em address@hidden, "Cristiano" <boxferrari@...> escreveu
>
> Ilustres, bom dia.
> 
> Tenho 2 diretórios com o seguinte conteúdo.
> 
> #ls /dirA | head -n 4
> 1.txt
> 2.txt
> 3.txt
> 4.txt
> 
> #ls /dirB | head -n 4
> a.txt
> b.txt
> c.txt
> d.txt
> 
> Ambas as listas de arquivos SEMPRE** terão a mesma quantidade de arquivos 
> (limitado pelo HEAD), mas não há um padrão para os nomes em ambos os 
> diretórios. Ou seja, os nomes dos arquivos **SEMPRE** serão variáveis e 
> aleatórios, em ambas as listas.
> 
> Eu preciso fazer com que os arquivos da lista 2 (dirB) fiquem com o mesmo 
> timestamp dos arquivos da lista 1 (dirA).
> 
> Algo tipo:
> 
> #touch -r /dirA/1.txt /dirB/a.txt
> #touch -r /dirA/2.txt /dirB/b.txt
> #touch -r /dirA/3.txt /dirB/c.txt
> #touch -r /dirA/4.txt /dirB/d.txt
> 
> A relação sempre será esta: o rótulo do primeiro arquivo da lista B, será 
> referenciado pelo primeiro arquivo da lista A, e assim por diante.
> 
> Pensei em usar o for para criar um laço e processar as listas, mas eu 
> precisaria de um for para cada lista e que ambos fossem executados em 
> paralelo. 
> 
> Então, como eu poderia fazer para que ambas as listas fossem processadas em 
> paralelo para que eu pudesse executar o touch conforme descrito acima?
> 
> Abraço
>


HÁ! Eureka! 

Auto-resposta (ou seria Autorresposta?): É só pensar um pouco fora do quadrado: 
Process Substitution (I LOVE BASH!)

Usando process substitution com o paste eu consigo concatenar as listas em 
colunas:

# paste <(ls 127* | head -n 10) <(ls /tmp/*DFU* | head -n 10)
1270646009_base.fdb     /tmp/X_FERRARI-20100302_MOVIM_DFU.txt
1270646010_base.fdb     /tmp/X_FERRARI-20100303_MOVIM_DFU.txt
1270646011_base.fdb     /tmp/X_FERRARI-20100304_MOVIM_DFU.txt
1270646012_base.fdb     /tmp/X_FERRARI-20100305_MOVIM_DFU.txt
1270646013_base.fdb     /tmp/X_FERRARI-20100306_MOVIM_DFU.txt
1270646014_base.fdb     /tmp/X_FERRARI-20100307_MOVIM_DFU.txt
1270646015_base.fdb     /tmp/X_FERRARI-20100310_MOVIM_DFU.txt
1270646016_base.fdb     /tmp/X_FERRARI-20100311_MOVIM_DFU.txt
1270646017_base.fdb     /tmp/X_FERRARI-20100312_MOVIM_DFU.txt
1270646018_base.fdb     /tmp/X_FERRARI-20100313_MOVIM_DFU.txt

Então ficou fácil (em uma linha):

#while read TO FROM ; do echo "touch -r ${FROM} ${TO}" ; done < <( paste <(ls 
127* | head -n 10) <(ls /tmp/*DFU* | head -n 10))

touch -r /tmp/X_FERRARI-20100302_MOVIM_DFU.txt 1270646009_base.fdb
touch -r /tmp/X_FERRARI-20100303_MOVIM_DFU.txt 1270646010_base.fdb
touch -r /tmp/X_FERRARI-20100304_MOVIM_DFU.txt 1270646011_base.fdb
touch -r /tmp/X_FERRARI-20100305_MOVIM_DFU.txt 1270646012_base.fdb
touch -r /tmp/X_FERRARI-20100306_MOVIM_DFU.txt 1270646013_base.fdb
touch -r /tmp/X_FERRARI-20100307_MOVIM_DFU.txt 1270646014_base.fdb
touch -r /tmp/X_FERRARI-20100310_MOVIM_DFU.txt 1270646015_base.fdb
touch -r /tmp/X_FERRARI-20100311_MOVIM_DFU.txt 1270646016_base.fdb
touch -r /tmp/X_FERRARI-20100312_MOVIM_DFU.txt 1270646017_base.fdb
touch -r /tmp/X_FERRARI-20100313_MOVIM_DFU.txt 1270646018_base.fdb

Alguém pensou em algo diferente? ("toc-toc" Mestre Júlio & Cia)...




reply via email to

[Prev in Thread] Current Thread [Next in Thread]