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/ \;