Copie apenas arquivos * .h com subpastas estrutura bash

1

Eu preciso escrever um script para copiar apenas arquivos * .h salvando a estrutura de pastas:

agora é assim:

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

mas os arquivos estão em uma pasta, como posso resolver isso?

    
por ShurupuS 08.12.2014 / 07:32

2 respostas

1

No linux find pode ser realmente poderoso.

Você pode usar

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 

Notas:
cp -p preserva propriedade ...
cp --parents cria o diretório destino, mas precisa que o diretório base exista.
mkdir -p Cria o diretório com o caminho de todos os pais sem erro se existir apenas man find para todas as opções de encontrar.

Se você quiser permanecer perto do script precedente

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

Observe que com dirname você pode extrair de um caminho completo + uma string de nome de arquivo somente o caminho.
Verifique a ajuda com man dirname e man basename

    
por 08.12.2014 / 07:55
1

Resolveu o problema desta maneira:

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')

Mas a solução Hastur também é legal - faça a solução dele como a melhor

    
por 08.12.2014 / 11:22

Tags