[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)...