ฉันจะคัดลอกแผนผังต้นไม้ แต่ไม่ใช่ไฟล์ใน Linux ได้อย่างไร


17

ฉันต้องการคัดลอกประมาณ 200 ไดเรกทอรี & ไดเรกทอรีย่อยจากที่หนึ่งไปอีกที่หนึ่ง แต่ฉันไม่ต้องการคัดลอกหลายพันไฟล์ภายในไดเรกทอรีเหล่านั้น ฉันอยู่บน Linux

หมายเหตุ: ฉันมีพื้นที่ไม่เพียงพอที่จะคัดลอกทุกอย่างจากนั้นลบไฟล์ทั้งหมด

คำตอบ:




5

อีกวิธีคือด้วยfindและmkdir :

find SOURCE -type d -exec mkdir TARGET/{} \;

เพียงตรวจสอบให้แน่ใจว่าเป้าหมายมีอยู่แล้วหรือใช้ตัวเลือก -p ของ mkdir


3

คุณยังสามารถทำสิ่งต่อไปนี้

find inputdir -type d | cpio -pdumv destdir

พลังแห่งความเรียบง่าย;)


1

ในทำนองเดียวกันการใช้ (GNU) tar:

find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)

คุณไม่จำเป็นต้องใช้-print0บนบรรทัดคำสั่ง find หรือ-0บนบรรทัดคำสั่ง rsync ยกเว้นว่าคุณมีชื่อไฟล์ที่มีอักขระขึ้นบรรทัดใหม่ (ซึ่งเป็นไปได้ แต่ไม่น่าเป็นไปได้สูง) Tar (และ rsync และ cpio) อ่านชื่อไฟล์ทีละบรรทัด; การใช้ NULL terminator ส่วนใหญ่จะเป็นประโยชน์กับxargsซึ่งโดยปกติจะอ่านชื่อไฟล์ที่คั่นด้วยช่องว่าง (และดังนั้นจึงไม่จัดการไฟล์ / ไดเรกทอรีที่มีช่องว่างในชื่อของพวกเขาโดยไม่ต้อง-0)



-1
cp -al 

จะคัดลอกไฟล์ทั้งหมดด้วยฮาร์ดลิงก์ โครงสร้างเดียวกันสิทธิ์เดียวกัน (หมายเหตุ: ฮาร์ดลิงก์ดังนั้นจึงไม่มีการจัดเก็บข้อมูลสูญหาย)


ไม่สามารถสร้างการเชื่อมโยงอย่างหนักข้ามขอบเขตของระบบไฟล์
MountainX-for-Monica

จริง แต่มันก็ไม่ได้บอกว่ามันเป็นระบบแฟ้มข้าม ...
SvennD

-1

ls -d * / @source: find -type d -print0> dirs.txt @destination: xargs -0 mkdir -p

สิ่งนี้จะทำให้ทั้งสองคำสั่งใช้ค่า null เป็นตัวคั่นแทนช่องว่าง โปรดทราบว่าลำดับของ -type d และ -print0 นั้นสำคัญ!


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