
次の名前のフォルダの 4 つのサブフォルダに同じ名前のファイルがありますbuild
:
- リリース-iPhoneOS
- リリース-iPhoneシミュレーター
- デバッグ-iPhoneOS
- デバッグ-iPhoneシミュレータ
sdk
これらのファイルを、スクリプトを使用せずに、コマンドラインでフォルダー内の同一のディレクトリ構造にコピーしたいと思います。
私ができるはずだと思ったのは次のようなものです:
for C in (release debug); for T in (iphoneos iphonesimulator); cp build/$C-$T/*.a sdk/$C-$T
しかし、私は Linux の人間ではないので、ループを調べてもうまく動作しません。 1 行で簡単に実行できますか?
答え1
あなたのアプローチにはいくつか問題があります:
(A B)
配列の割り当て(例: )にのみ使用できC=(A B)
、オンザフライで配列を作成することはできません。しかし、のために配列は必要ないので、
for C in A B
問題なく動作します。for
ループの適切な構文は ですfor ... in ...; do ..., done
。
このコマンドは問題なく動作するはずです:
for C in release debug; do for T in iphoneos iphonesimulator; do cp build/$C-$T/*.a sdk/$C-$T; done; done
これには適切なフォルダが必要であることに注意してくださいSDKすでに存在している。
ただし、@Robertof がすでに示したように、ループなしでこれをアーカイブする方法はあります。
コピーしたい場合全てディレクトリからファイルを検索する場合 (つまり、*.a
すべてに一致する場合)、このコマンドを使用するか、または少し簡略化した次のコマンドを使用できます。
cp -R build/{release,debug}-iphone{os,simulator} sdk
使い方:
シェルは実行しますブレース拡張したがって、実際に実行されるコマンドは次のようになります。
cp -r build/release-iphoneos build/release-iphonesimulator build/debug-iphoneos build/debug-iphonesimulator sdk
スイッチ
-r
はcp再帰的、つまり、ファイルだけではなくディレクトリ全体をコピーします。
`だけをコピーしたい場合は、.aファイルがある場合(つまり、他にもファイルがある場合)、次のコマンドを使用する方が適切です。
cd build
cp --parents {release,debug}-iphone{os,simulator}/*.a ../sdk
使い方:
ここでも、前と同じようにブレース拡張が実行されます。
スイッチ
--parents
はcp宛先には完全なソースファイル名を使用します。つまり、 のファイルはrelease-iphoneos
にコピーされます../sdk/release-iphoneos
。
最後に、アドバイスを一つ。
実験するときcpコマンドを実行するときは、必ず-i
スイッチを使用してください。cp対話型なので、何かを上書きする前にプロンプトが表示されます。
答え2
試す:
cp -R build/{release-iphoneos,release-iphonesimulator,debug-iphoneos,debug-iphonesimulator} sdk/