Como copiar 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

Quero copiar esses arquivos (com a respectiva pasta imediatamente acima) para um novo local.

Eu tentei algo assim (dir1, dir2, dir3, dir4 já são feitos):

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

Obviamente, isso não funciona, mas não sei como fazê-lo adequadamente em uma linha (o que seria preferido, mas se um script precisar ser escrito não é grande coisa).

Blitztm
fonte

Respostas:

6

Se o seu cpsuportar a --parentsopção, você pode usar

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

O forloop 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 ivolved):

cd /path/to/this
find -path './dir[1234]' -exec cp {}/data.csv /path/to/target/{} \;
choroba
fonte