
Ich habe identisch benannte Dateien in 4 Unterordnern des Ordners build
mit dem Namen:
- iPhone-OS-Veröffentlichung
- Veröffentlichung-iPhone-Simulator
- debuggen-iphoneos
- Debuggen des iPhone-Simulators
Ich möchte diese Dateien über die Befehlszeile in eine identische Verzeichnisstruktur in einem Ordner kopieren sdk
, jedoch nicht mithilfe eines Skripts.
Ich dachte, ich sollte in der Lage sein, etwas zu tun wie:
for C in (release debug); for T in (iphoneos iphonesimulator); cp build/$C-$T/*.a sdk/$C-$T
Aber ich bin kein Linux-Fan und bekomme es nicht zum Laufen, selbst nachdem ich nach Schleifen gesucht habe. Kann man das relativ einfach in einer einzigen Zeile erledigen?
Antwort1
Ihr Ansatz bringt einige Probleme mit sich:
(A B)
kann nur für die Array-Zuweisung (z. B.) verwendet werdenC=(A B)
, nicht für die spontane Erstellung eines Arrays.Jedoch,fürerfordert kein Array,
for C in A B
funktioniert also einwandfrei.Die richtige Syntax für
for
Schleifen istfor ... in ...; do ..., done
.
Dieser Befehl sollte einwandfrei funktionieren:
for C in release debug; do for T in iphoneos iphonesimulator; do cp build/$C-$T/*.a sdk/$C-$T; done; done
Beachten Sie, dass hierfür die entsprechenden Ordner erforderlich sind inSDKbereits zu existieren.
Wie @Robertof jedoch bereits gezeigt hat, gibt es Möglichkeiten, dies ohne jegliche Schleifen zu archivieren.
Wenn Sie kopieren möchtenalleDateien aus den Verzeichnissen (d. h., sie *.a
passen zu allen), können Sie seinen Befehl oder diese leichte Vereinfachung verwenden:
cp -R build/{release,debug}-iphone{os,simulator} sdk
Wie es funktioniert:
Die Shell wirdKlammererweiterung, daher wird folgender Befehl tatsächlich ausgeführt:
cp -r build/release-iphoneos build/release-iphonesimulator build/debug-iphoneos build/debug-iphonesimulator sdk
Der
-r
Schalter machtcprekursiv, d. h. es werden ganze Verzeichnisse statt nur Dateien kopiert.
Wenn Sie nur die ` kopieren möchten.ADateien (es gibt also noch andere), verwenden Sie besser diese Befehle:
cd build
cp --parents {release,debug}-iphone{os,simulator}/*.a ../sdk
Wie es funktioniert:
Auch hier wird die Klammererweiterung wie zuvor durchgeführt.
Der
--parents
Schalter machtcpVerwenden Sie den vollständigen Quelldateinamen für das Ziel, d. h. Dateien vonrelease-iphoneos
werden nach kopiert../sdk/release-iphoneos
.
Zum Schluss noch ein Ratschlag:
Beim Experimentieren mitcpBefehle, verwenden Sie immer den -i
Schalter. Es machtcpinteraktiv, was bedeutet, dass vor dem Überschreiben eine Abfrage erfolgt.
Antwort2
Versuchen:
cp -R build/{release-iphoneos,release-iphonesimulator,debug-iphoneos,debug-iphonesimulator} sdk/