
Nomeei arquivos de forma idêntica em 4 subpastas da pasta build
chamada:
- lançamento-iphoneos
- simulador de lançamento de iphone
- debug-iphoneos
- simulador de depuração de iPhone
Quero copiar esses arquivos para uma estrutura de diretórios idêntica em uma pasta sdk
, na linha de comando - mas não usando um script.
O que pensei que deveria ser capaz de fazer é algo como:
for C in (release debug); for T in (iphoneos iphonesimulator); cp build/$C-$T/*.a sdk/$C-$T
Mas não sou um cara do Linux e não consigo fazê-lo funcionar mesmo depois de procurar loops. Isso pode ser feito em uma única linha com bastante facilidade?
Responder1
Existem alguns problemas com sua abordagem:
(A B)
só pode ser usado para atribuição de array (por exemplo,C=(A B)
), não para criar um instantaneamente.No entanto,paranão requer uma matriz, então
for C in A B
funcionará perfeitamente.A sintaxe adequada para
for
loops éfor ... in ...; do ..., done
.
Este comando deve funcionar bem:
for C in release debug; do for T in iphoneos iphonesimulator; do cp build/$C-$T/*.a sdk/$C-$T; done; done
Observe que isso requer as pastas adequadas emSDKjá existir.
Porém, como @Robertof já mostrou, existem maneiras de arquivar isso sem nenhum loop.
Se você quiser copiartodosarquivos dos diretórios (ou seja, *.a
corresponde a todos eles), você pode usar o comando dele ou esta ligeira simplificação:
cp -R build/{release,debug}-iphone{os,simulator} sdk
Como funciona:
O shell irá executarexpansão de cinta, então o comando que será realmente executado é este:
cp -r build/release-iphoneos build/release-iphonesimulator build/debug-iphoneos build/debug-iphonesimulator sdk
A
-r
mudança fazCPrecursivo, ou seja, copiará diretórios inteiros em vez de apenas arquivos.
Se você quiser copiar apenas o `.aarquivos (ou seja, existem outros), é melhor usar estes comandos:
cd build
cp --parents {release,debug}-iphone{os,simulator}/*.a ../sdk
Como funciona:
Novamente, a expansão das chaves é executada como antes.
A
--parents
mudança fazCPuse o nome completo do arquivo de origem para o destino, ou seja, os arquivos derelease-iphoneos
serão copiados para../sdk/release-iphoneos
.
Por fim, um conselho:
Ao experimentarCPcomandos, sempre use o -i
switch. Isso fazCPinterativo, o que significa que ele avisará antes de substituir qualquer coisa.
Responder2
Tentar:
cp -R build/{release-iphoneos,release-iphonesimulator,debug-iphoneos,debug-iphonesimulator} sdk/