Tente:
find src/ -type f | grep -i so$ | xargs -i cp {} dst
Se eu quisesse copiar todos os arquivos *.so
de src
para dst
, faria:
cp src/*.so dst
No entanto, quero copiar todos os arquivos *.so
de src e seus subdiretórios em dst
. Alguma pista?
Se você estiver usando o Bash, poderá ativar o globstar
opção de shell para corresponder arquivos e diretórios recursivamente:
shopt -s globstar
cp src/**/*.so dst
Se você precisar encontrar arquivos cujos nomes comecem com .
,
e / ou arquivos em e sob diretórios cujos nomes começam com .
,
defina também a opção dotglob
(por exemplo, com shopt -s dotglob
).
Você pode definir os dois em um comando:
shopt -s globstar dotglob
Eu tentei o comando sugerido por Mike:
find src/ -type f | grep -i so$ | xargs -i cp {} dst
mas acabou despejando todos os arquivos no diretório dst
com seus caminhos relativos perdidos.
Para manter os caminhos relativos, o comando precisa ser modificado para isso:
find src/ -type f | grep -i so$ | xargs -i cp {} dst/{}
O grep pode ser substituído usando o -name do find:
find src/ -type f -name "*.so" | xargs -i cp {} dst/{}
Outra maneira de fazer isso é assim:
find src/ -type f -name "*.so" -exec cp {} dst/ \;