Como copio arquivos com expansão de chaves no caminho?

1

Eu tenho um arquivo com o mesmo nome (dados diferentes) e está localizado em vários diretórios.

Um exemplo:

/path/to/this/dir1/data.csv
/path/to/this/dir2/data.csv
/path/to/this/dir3/data.csv
/path/to/this/dir4/data.csv

Eu quero copiar esses arquivos (com sua respectiva pasta imediatamente acima) para um novo local.

Eu tentei algo assim (dir1, dir2, dir3, dir4 já foram feitos):

cp -rf /path/to/this/{dir1,dir2,dir3,di4}/data.csv ./{dir1,dir2,dir3,dir4}/.

Isso obviamente não funciona, mas não tenho certeza de como fazer isso corretamente em uma linha (o que seria o preferido, mas se um script precisa ser escrito não é grande coisa).

    
por Blitztm 14.08.2013 / 21:52

1 resposta

6

Se o seu cp suportar a opção --parents , você poderá usar

cd /path/to/this
cp --parents dir{1..4}/data.csv /path/to/target/

O loop for também deve funcionar:

for data in /path/to/this/dir{1..4}/data.csv ; do
    cp $data ${data#path/to/this/}
done

Ou use find (sem expansão de chave suspensa):

cd /path/to/this
find -path './dir[1234]' -exec cp {}/data.csv /path/to/target/{} \;
    
por 14.08.2013 / 22:00

Tags