Копировать только файлы *.h со структурой подпапок bash
Мне нужно написать скрипт для копирования только *.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
но файлы находятся в одной папке, как я могу решить это?
2 ответа
В линуксе 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
создать каталог назначения, но необходимо, чтобы базовый каталог существовал.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
Решил проблему следующим образом:
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')
Но решение Hastur тоже приятно - сделай его решение лучшим