คัดลอกเฉพาะไฟล์ * .h ที่มี bash โครงสร้างโฟลเดอร์ย่อย


1

ฉันต้องเขียนสคริปต์เพื่อคัดลอกเฉพาะไฟล์ * .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สร้างปลายทางปลายทาง แต่ต้องการไดเรกทอรีฐานที่มีอยู่
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


1

แก้ไขปัญหาด้วยวิธีนี้:

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 ก็ดีเหมือนกัน - ทำให้ทางออกของเขาดีที่สุด


Creative woraround :)
Hastur
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.