บรรทัดคำสั่งซ้ำ / คัดลอกไดเรกทอรีลึกใน Linux


13

อะไรคือวิธีที่ดีที่ใช้กันทั่วไปในการทำสำเนาแบบเรียกซ้ำ / ลึกลงไปใน Linux ซึ่งทำงานได้ในหลาย ๆ กรณี? ฉันใช้สิ่งที่เรียบง่ายเช่นcp -Rเดียวกับcpioคาถาที่ซับซ้อน มีจุดแข็งหรือจุดอ่อนที่สำคัญที่ทำให้คุณชอบมากกว่าอีกด้านหรือไม่? คุณใช้อันไหนบ่อยที่สุด?

คำตอบ:


29
NAME
cp - copy files and directories

-a, --archive
   same as -dpR

-d     same as --no-dereference --preserve=links
-p     same as --preserve=mode,ownership,timestamps
-R, -r, --recursive
    copy directories recursively

ดังนั้นในการตอบคำถามของคุณ:

cp -a /foo /bar

คัดลอกทุกอย่างซ้ำ ๆ จากไดเรกทอรี / foo ไปยังไดเรกทอรี / แถบในขณะที่รักษาลิงก์สัญลักษณ์และไฟล์ / ไดเรกทอรี 'โหมด' 'ความเป็นเจ้าของ' & 'เวลา'


นี่เป็นทางออกที่ตรงไปตรงมาและสวยงามมาก คุณเคยพบข้อบกพร่องของวิธีนี้หรือไม่? ระบบไฟล์แบบกระจาย? สำเนาที่มีขนาดใหญ่มาก? คุณเคยพบวิธีแก้ปัญหาอื่น ๆ เช่น cpio, tar หรือ rsync เพื่อให้มีประสิทธิภาพมากขึ้นในบางกรณีหรือไม่?
เกร็ก Mattes

1
เว้นแต่จะมีข้อผิดพลาดทางกายภาพฉันไม่เคยมี 'cp' ในตัวเครื่องล้มเหลวจากหน่วยความจำ (ฉันเพิ่งทำการถ่ายโอนขนาด TB ไปยังสถานที่ใด ๆ ที่ติดตั้งอยู่ (โดยไม่คำนึงถึงการติดตั้ง NFS หรือ Samba) ชำระเงิน 'ใช้' ภายใต้หน้า rsync สำหรับตัวอย่างที่คุณจะได้รับคำแนะนำ รายการโปรดของฉัน: $ rsync - ส่วนหนึ่ง - โปรเกรส --rsh = ssh --archive --verbose --compress foo / user @ hosname: ~ / bar (rsync -avzP)
Gareth

ตามที่ระบุไว้ข้างต้น - a ไม่ได้พกพาอย่างเคร่งครัด
Matthew Flaschen

ฉันรู้แล้วว่า busybox, GNU และ BSD cp นั้นใช้ได้ นอกเหนือจากกล่อง Unix รุ่นเก่าฉันไม่เคยเห็นสิ่งที่จะใช้งานได้ ฉันไม่เห็นจุดนั้นจริง ๆ แม้ว่าฉันจะเข้าใจความเชื่อมั่นของ Zoredache ในเรื่องของ "มันดูเหมือนว่าจะทำให้งานสำเร็จได้อย่างถูกต้องเสมอ
Gareth

@gyaresu โปรดพิจารณาแยกความคิดเห็นที่สองของคุณออกเป็นคำตอบอื่นเพื่อให้เราสามารถลงคะแนนได้
Greg Mattes

6

ฉันใช้คำสั่งเช่น"cd $ srcdir; tar -c. | tar -C $ destdir -x"บ่อยที่สุด แต่ฉันก็ใช้ rsync -a $ src $ dst

จุดแข็งที่ใหญ่ที่สุดของโซลูชัน tar คือมันเป็นสิ่งที่ฉันต้องใช้ในระบบเมื่อหลายปีก่อนที่ไม่มี cpio, rsync หรือ cp ที่จะคัดลอกซ้ำ น้ำมันดินสวยมากทุกที่ มันติดอยู่บนหัวของฉันเพราะฉันใช้มันเยอะมาก ดูเหมือนว่าจะทำงานให้ถูกต้องอยู่เสมอดังนั้นฉันไม่เคยมองหางานทดแทนมาก่อน


ฉันชอบ "การแพร่หลายของน้ำมันดิน" โต้แย้งกันมากมาย ฉันเชี่ยวชาญใน vi ด้วยเหตุผลที่คล้ายกันแม้ว่าฉันจะชอบสภาพแวดล้อมการแก้ไขอื่น ๆ
เกร็ก Mattes

-R เป็นส่วนหนึ่งของมาตรฐานมานานแล้ว ( opengroup.org/onlinepubs/009695399/utilities/cp.html ) แม้ว่าไม่ใช่ -a
Matthew Flaschen

@Matthew Flaschen: ความคิดเห็นของคุณมีไว้สำหรับคำตอบของ @ gyaresu หรือไม่
Greg Mattes

นอกจากนี้ยังเกี่ยวข้องกับสิ่งนี้ตามที่ Zoredache กล่าวว่าเขาพบกับระบบที่ "ไม่มี [... ] cp ที่จะคัดลอกซ้ำ" โดยทั่วไป -R -> พกพา, -a -> ไม่พกพา
Matthew Flaschen

1
สิ่งนี้กลับมาอีกครั้งใน ~ 95 และระบบกำลังใช้ Unix รุ่น 80 ปลาย ฉันไม่คิดว่า - R เป็นตัวเลือกสำหรับ cp แต่ฉันไม่แน่ใจ ฉันเรียนรู้อาหารอันโอชะที่อ่าน Usenet
Zoredache

6

ลองดู rsync ... ฉันชอบเพราะคุณคัดลอกข้อมูลน้อยลงเมื่อรักษาสองไดเรกทอรีให้ทันสมัย ​​... มันยังสามารถทำงานในระยะไกลได้ ในรูปแบบที่ง่ายที่สุด rsync -a / src / dest


นี่เป็นจุดที่ดีจริงๆ rsync เป็นหลักมีความสามารถในการคำนวณ "ไดเรกทอรีต่าง" และโอนเฉพาะสิ่งที่จำเป็นในการประสานไดเรกทอรี ดังนั้นคุณสามารถเรียกบางสิ่งบางอย่างซ้ำ ๆ เช่น rsync -a src / dest ไปยังไดเรกทอรี "คัดลอกอย่างต่อเนื่อง" ซ้ำ ๆ (ต้องการ trailing / on src เพื่อการซิงโครไนซ์ที่เหมาะสม) ในขณะที่ cp -a src / dest ไม่ทำงานอย่างนั้น คำสั่ง cp จะสร้างไดเรกทอรี src ใหม่ในปลายทางหลังจาก cp แรก คุณต้องการบางอย่างเช่น cp -au src / * dest สำหรับสำเนาที่ตามมา
เกร็ก Mattes

อีกเหตุผลที่ฉันชอบ rsync ก็คือคุณสามารถส่งผ่านแฟล็ก -P ซึ่งแสดงแถบความคืบหน้า มันทำให้คุณมีความคิดของวิธีการบางอย่างยาวจะใช้เวลาบางส่วน
Rory

0

rsyncเป็นเครื่องมือที่ยอดเยี่ยม มันเป็นมีดกองทัพสวิสของการถ่ายโอนข้อมูล มันเป็นเครื่องมือที่ง่ายและทรงพลัง เมื่อคุณเริ่มใช้คุณจะได้รับการติดยาเสพติด

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