คัดลอกซ้ำยกเว้นไดเรกทอรีที่ซ่อนอยู่


13

ฉันจะคัดลอกแบบวนซ้ำcp -rf *แต่ไม่รวมไดเรกทอรีที่ซ่อนอยู่ (ไดเรกทอรีที่ขึ้นต้นด้วย) และเนื้อหาได้อย่างไร

คำตอบ:


6

คุณสามารถคัดลอกทุกอย่างด้วย

cp -rf 

จากนั้นลบไดเรกทอรีที่ซ่อนอยู่ที่ปลายทางด้วย

find -type d -name '.*' -and -not -name '.' -print0 | xargs -0 rm -rf

อีกวิธีหนึ่งถ้าคุณมี tar ขั้นสูง (เช่น GNU tar) คุณสามารถลองใช้ tar เพื่อแยกรูปแบบบางอย่างออก แต่ฉันกลัวว่าเป็นไปไม่ได้ที่จะยกเว้นเฉพาะไดเรกทอรีที่ซ่อนอยู่ แต่รวมถึงไฟล์ที่ซ่อนอยู่

ตัวอย่างเช่นสิ่งนี้:

tar --exclude=PATTERN -f - -c * | tar -C destination -f - -x

Btw, GNU tar มีสวนสัตว์ที่ไม่รวมตัวเลือกรูปแบบ สิ่งที่ฉันชอบคือ

--exclude-vcs

30

ตัวเลือกที่ดีสำหรับการคัดลอกแผนผังไดเรกทอรียกเว้นไฟล์บางไฟล์คือ:

  • rsync : นี่คือ cp โดยทั่วไปบวกกับความเป็นไปได้มากมาย

    rsync -a --exclude='.*' /source/ /destination
    
  • pax : มีความสามารถในการแยกบางส่วนและอยู่ใน POSIX ดังนั้นจึงควรมีอยู่ทุกที่ (ยกเว้นว่าลีนุกซ์บางรุ่นไม่ได้รวมไว้ในการติดตั้งเริ่มต้นด้วยเหตุผลบางประการ)

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    

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