Copie vários arquivos para um diretório com paralelismo

3

Estou usando o seguinte script para copiar vários arquivos em uma pasta:

{ echo $BASE1; echo $BASE2; echo $BASE3; } | parallel cp -a {} $DEST

Existe alguma maneira de usar apenas um echo $ BASE com a expansão de chaves?

Quero dizer algo assim:

{ echo $BASE{1..3} } | parallel cp -a {} $DEST
    
por damianjb 27.10.2012 / 06:41

2 respostas

1

Você pode usar uma matriz:

BASES[0]=...
BASES[1]=...
BASES[2]=...
# or BASES+=(...)
# or BASES=(foo bar baz)
echo "${BASES[@]}" | parallel cp -a {} $DEST

Para torná-lo mais seguro (espaços e novas linhas na variável em particular), algo como isso deve funcionar de forma mais confiável:

printf "%s
BASES[0]=...
BASES[1]=...
BASES[2]=...
# or BASES+=(...)
# or BASES=(foo bar baz)
echo "${BASES[@]}" | parallel cp -a {} $DEST
" "${BASES[@]}" | parallel -0 cp -a {} "$DEST"

Nota: arrays não estão em POSIX, isso funciona com as versões atuais do bash e ksh.

    
por 27.10.2012 / 07:34
1

Você pode usar printf em vez de echo para obter as novas linhas necessárias:

 env printf "%s\n" $BASE{1..3} | parallel cp -a {} $DEST
    
por 27.10.2012 / 07:39