我需要编写一个脚本来仅复制 *.h 文件并保存文件夹结构:
现在看起来像这样:
cd "${SRCROOT}"
echo 'Copying Cocos Headers into Framework..'
cd ..
for H in `find ./Frameworks/Cocos -name "*.h"`; do
echo "${H}"
ditto -V "${H}" "${BUILD_DIR}/include/header/cocos/"
done
但文件位于一个文件夹中,我该如何解决这个问题?
答案1
在linux下find
可真是功能强大。
您可以使用
OutDir="${BUILD_DIR}/include/header/cocos/" # Linux is case sensitive, Check if
mkdir -p "${OutDir}" # it is needed Cocos or cocos...
cd ./Frameworks/Cocos # just to have clean path to create
# Here with only one line
find . -name "*.h" -exec bash -c 'cp -p --parents {} "${OutDir}" ' \;
# cd - # Eventually to come back to the previous path
注意:
cp -p
保留所有权...
cp --parents
创建目标目录,但需要其基目录存在。如果find 的所有选项
mkdir -p
都存在,则创建包含所有父级路径的目录而不会出现错误。
man find
如果你想保持接近先前的脚本
cd "${SRCROOT}"
echo 'Copying Cocos Headers into Framework..'
StartSearchDir="${SRCROOT}../Frameworks/Cocos"
BaseDestDir="${BUILD_DIR}/include/header/cocos/"
cd $StartSearchDir
for H in `find . -name "*.h"`; do
echo "${H}"
PathFileDir=$(dirname $H)
mkdir -p "${BUILD_DIR}/${PathFileDir}" # no error, make parents too
cp -p "$H" "${BUILD_DIR}/${PathFileDir}/" # preserve ownership...
# ditto -V "${H}" "${BUILD_DIR}/include/header/cocos/" # commented line
done
注意,您dirname
可以从完整路径+文件名字符串中提取路径。
查看帮助man dirname
man basename
答案2
以这种方式解决了该问题:
cd "${SRCROOT}"
echo 'Copying Cocos Headers into Framework..'
StartSearchDir="${SRCROOT}/../Frameworks/Cocos"
BaseDestDir="${BUILD_DIR}/include/${PRODUCT_NAME}/header/cocos/"
echo 'STARTDIR:'$StartSearchDir
echo 'DESTDIR:'$BaseDestDir
cd $StartSearchDir
tar -cf - . | (cd $BaseDestDir ; tar -xpf - --include='*.h')
但哈斯塔的解决方案也很好——让他的解决方案成为最好的解决方案