
我在build
名為的資料夾的 4 個子資料夾中具有相同名稱的檔案:
- 發布-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
您的方法有幾個問題:
(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
請注意,這需要正確的資料夾開發工具包已經存在了。
然而,正如 @Robertof 已經表明的那樣,有一些方法可以在沒有任何循環的情況下對其進行存檔。
如果你想複製全部目錄中的檔案(即*.a
符合所有檔案),您可以使用他的命令或這個稍微簡化的命令:
cp -R build/{release,debug}-iphone{os,simulator} sdk
怎麼運作的:
shell將執行大括號擴展,所以實際執行的命令是:
cp -r build/release-iphoneos build/release-iphonesimulator build/debug-iphoneos build/debug-iphonesimulator sdk
此
-r
開關使CP遞歸,即它將複製整個目錄而不僅僅是文件。
如果您只想複製`。文件(即還有其他文件),您最好使用這些命令:
cd build
cp --parents {release,debug}-iphone{os,simulator}/*.a ../sdk
怎麼運作的:
再次,像以前一樣執行大括號擴展。
此
--parents
開關使CP使用完整的來源檔案名稱作為目標,即檔案 fromrelease-iphoneos
將被複製到../sdk/release-iphoneos
.
最後,一句忠告:
嘗試時CP命令,始終使用-i
開關。它使CP互動式,這意味著它會在覆蓋任何內容之前進行提示。
答案2
嘗試:
cp -R build/{release-iphoneos,release-iphonesimulator,debug-iphoneos,debug-iphonesimulator} sdk/