คุณจะคัดลอกไดเรกทอรีและเนื้อหาไปยังตำแหน่งใหม่ภายใต้ชื่อไดเรกทอรีใหม่ได้อย่างไร


52

ฉันยังใหม่กับบรรทัดคำสั่ง Linux และฉันพยายามจับคำสั่ง copy ในขณะนี้

ใครช่วยกรุณาบอกฉันว่าเป็นไปได้ที่จะคัดลอกไดเรกทอรีที่มีไดเรกทอรีย่อยและไฟล์ที่เกี่ยวข้องไปยังไดเรกทอรีใหม่ที่มีชื่อใหม่เช่น directory_backup?

ขอบคุณสำหรับความช่วยเหลือใด ๆ และทั้งหมดล่วงหน้า

คำตอบ:


69

คุณใช้-r(คัดลอกซ้ำ) และระบุชื่อใหม่

cp -r /path/to/directory /path/to/location/new-name

เปลี่ยนเส้นทางจริง ... ตัวอย่างเช่นการคัดลอกstuffจากไดเรกทอรีบ้านของฉันไปยังมีอยู่ไดเรกทอรีbackupและชื่อไดเรกทอรีใหม่stuff-backup(ถ้าไดเรกทอรีนี้มีอยู่แล้วทราบว่าstuffจะถูกคัดลอกลงในมันไม่ได้เขียนทับมัน)

cp -r ~/stuff ~/backup/stuff-backup

~เป็นทางลัดสำหรับไดเรกทอรีบ้านของคุณ/home/$USERหรือ/home/zannaในกรณีของฉัน คุณสามารถละเว้นได้หากไดเรกทอรีการทำงานปัจจุบันคือไดเรกทอรีบ้านของคุณคุณสามารถดูได้จากพรอมต์ของคุณ

zanna@monster:~$
              ^--the ~ here is where I am - home!

คุณสามารถเพิ่มการ-vตั้งค่าสถานะ verbose เพื่อcpรายงานแต่ละสำเนาที่กำลังดำเนินการ ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...

ขออภัย Zanna ฉันจะนำคำแนะนำของคุณไปปฏิบัติและดูว่าฉันไปอย่างไร ชอบความคิดของธง verbose สมมติว่าสิ่งนี้จะทำงานเป็นรายงานในขณะที่คำสั่งอื่นกำลังทำงานอยู่ .. ไชโย
Edmuntu

@Emmuntu ขอโทษสำหรับอะไร ใช่จำนวนมากของคำสั่งที่มี-vหรือ--verboseธง :)
Zanna

ขออภัยสำหรับการเริ่มต้นสั้น ๆ "ขอบคุณ" .... กดปุ่มย้อนกลับผิดพลาด
Edmuntu

10

คำสั่งที่คุณต้องการคือเพียงcpซึ่งย่อมาจาก "คัดลอก"

คุณสามารถใช้มันได้ตัวอย่างเช่นหนึ่งในไวยากรณ์เหล่านี้:

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

ตัวแปรแรกช่วยให้คุณระบุชื่อไฟล์ใหม่สำหรับไฟล์เป้าหมายในขณะที่ตัวแปรที่สองสร้างสำเนาที่มีชื่อเดียวกันในไดเรกทอรีเป้าหมาย แน่นอนว่าคุณต้องแทนที่ผู้ถือสถานที่ด้วยอักษรตัวใหญ่ด้วยเส้นทางที่ถูกต้องก่อน

อย่างไรก็ตามcpตามค่าเริ่มต้นทำงานกับไฟล์เท่านั้นไม่ได้อยู่ในไดเรกทอรี หากต้องการให้มันคัดลอกไดเรกทอรีที่สมบูรณ์พร้อมเนื้อหาทั้งหมดซ้ำคุณต้องเพิ่ม-rตัวเลือก:

cp -r SOURCEDIRECTORY TARGETDIRECTORY

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับcpคำสั่งโดยพิมพ์man cpในเทอร์มินัลของคุณ


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

@Edmuntu ในอนาคตใช้ SHIFT + ENTER ในขณะที่แสดงความคิดเห็นเพื่อไปลงบรรทัด
TheOdd

@OwenHines เพียงแค่ความคิดเห็นที่ตัดการแบ่งบรรทัดใด ๆ และช่องว่างเพิ่มเติมและมีพวกเขาในการแก้ไขจะไม่เปลี่ยนแปลงอะไรในผล
ผู้บัญชาการ Byte

@BteteCommander โอ้ใช่ไม่เป็นไร ทีนี้เขาก็รู้
TheOdd

6

เป็นทางเลือกแทนคำสั่ง cp ที่มีประโยชน์โดยทั่วไปคุณสามารถใช้ rsync ซึ่งมีประโยชน์เพิ่มเติมในการทำซ้ำการอนุญาต / การประทับเวลาของโครงสร้างไดเรกทอรีดั้งเดิม:

rsync -av dir/ newdir

-a archive -v verbose

สังเกตเครื่องหมายทับหลังจากแหล่งที่มา


5

ฉันพบว่าการเปลี่ยนเป็นไดเรกทอรีที่ฉันกำลังคัดลอกมาง่ายกว่า /bootสำหรับการเปลี่ยนแปลงเช่นนี้ให้ทุกคนได้เรียกไดเรกทอรี ทุกคนสามารถคัดลอกและวางคำสั่งด้านล่างลงในเทอร์มินัล

cd /boot
sudo mkdir /boot_backup
sudo cp -r . /boot_backup
du /boot_backup -h

752K    /boot_backup/extlinux/themes/debian-wheezy
756K    /boot_backup/extlinux/themes
832K    /boot_backup/extlinux
2.5M    /boot_backup/grub/i386-pc
20K     /boot_backup/grub/locale
2.3M    /boot_backup/grub/fonts
7.2M    /boot_backup/grub
565M    /boot_backup

สำหรับcpคำสั่งไดเรกทอรีปัจจุบันจะถูกระบุว่า.เป็น/bootไดเรกทอรีใดที่เราเปลี่ยนไป -rตัวเลือกที่จะทำให้มัน recursive จะรวมไดเรกทอรีย่อยทั้งหมด

เพื่อให้แน่ใจว่าทำงานได้duเพื่อแสดงรายการไดเรกทอรีย่อยและขนาดไฟล์ทั้งหมดในไดเรกทอรีใหม่/boot_backupในกรณีนี้

หลังจากเสร็จสิ้นการแนะนำให้ใช้: sudo rm -r /boot_backupเพื่อลบไดเรกทอรีใหม่และเป็นไดเรกทอรีย่อย


1
ในขณะนี้จะอธิบายวิธีการคัดลอกไฟล์ทั้งหมดจาก dir ปัจจุบันของคุณไปยัง dir อื่นมันไม่ตอบคำถาม OPs เกี่ยวกับวิธีการคัดลอก dir (และเนื้อหา) ไปยังชื่อ dir อื่น มีคำสั่งที่สั้นกว่า (เช่นcp -r) ซึ่งจะดูแลการสร้างไดเรกทอรีใหม่และคัดลอกไฟล์ทั้งหมดลงในมัน
BlueCacti

1
มันอธิบายวิธีการคัดลอกและ dir และเนื้อหา - ความแตกต่างคือการเปลี่ยนแปลงไปยังไดเรกทอรีแหล่งแรกเป็นนิสัยที่ต้องระวัง cp -rตามที่คุณแนะนำอยู่ในบรรทัดคำสั่งที่สามแล้ว การสอนจะขึ้นอยู่กับความจริงที่ว่าทุกคนมี/bootไดเรกทอรีและสามารถลองด้วยตัวเอง ถ้าฉันใช้cp -r /home/GroundZero/Documents /home/GroundZero/Documents_backupผู้อ่านไม่สามารถคัดลอกและวางลงในเทอร์มินัลของพวกเขา - พวกเขาจะเปลี่ยนGroundZeroการสร้างงานมากขึ้นและมีโอกาสเกิดข้อผิดพลาด ฉันหวังว่าคุณจะพอใจ KISS ของคำตอบนี้ด้วยการสอนแบบฝัง
WinEunuuchs2Unix

1
@GroundZero กำลังทำcd ~/Documents/SomeObsucreFolder/2016/Nov/เพื่อตั้งค่าไดเรกทอรีปัจจุบันเป็นไดเรกทอรีต้นทางจะเปลี่ยนพรอมต์ Terminal เพื่อให้แน่ใจว่าสะกดถูกต้องแล้วใช้cp -r .เป็นแหล่งที่มากำจัดการพิมพ์ไดเรกทอรีต้นฉบับซ้ำ มันเป็นเพียงสิ่งที่ฉันคิดว่าเป็นนิสัยที่ดี นอกจากนี้ครั้งหนึ่งเคยเปลี่ยนไปยังไดเรกทอรีแหล่งที่มามันเป็นเรื่องง่ายที่จะทำls FIleName1, ls FileName2ฯลฯ เพื่อ esnure ไฟล์ที่คุณต้องการสำรองข้อมูลจะมีได้โดยไม่ต้องทำซ้ำชื่อแหล่งไดเรกทอรีสำหรับlsคำสั่ง
WinEunuuchs2Unix

5

คุณสามารถใช้คำสั่งด้านล่างเพื่อคัดลอกไดเรกทอรีจากที่หนึ่งไปยังอีกไดเรกทอรีย่อย

cp -Rvp /home/edmuntu/data /home/edmuntu/mydata/

คำอธิบายของคำสั่ง:

  • -R = คัดลอกไดเรกทอรีซ้ำ
  • v = อธิบายสิ่งที่กำลังทำ
  • p = จะช่วยให้คุณรักษาสิทธิ์และความเป็นเจ้าของของคุณด้วยการประทับเวลา

ขอบคุณ @Rakesh Chauhan "รักษาสิทธิ์และความเป็นเจ้าของของคุณด้วยการประทับเวลา" ??? ว้าว .... ฉันต้องไปให้ได้ !!!! อีกแง่มุมหนึ่งของคำสั่งบรรทัดที่จะสำรวจ ขอบคุณสำหรับการตอบกลับของคุณ.
Edmuntu

4

cpเป็นคำสั่งที่ทำหน้าที่ที่คุณกำลังมองหา มันย่อมาจากการทำสำเนาและมันทำอย่างนั้น คำสั่งที่เหมาะกับคุณในสถานการณ์เช่นนี้คือ

cp -R source/ destination/

นี้จะคัดลอกโฟลเดอร์และทั้งหมดของไดเรกทอรีย่อยเพื่อsource/destination/

หากdestination/ไม่มีอยู่มันจะถูกสร้างขึ้น

-Rธงยืนสำหรับ recursive ซึ่งบอกcpเพื่อคัดลอกไดเรกทอรีย่อยทั้งหมด


ขอบคุณ @ Owen Hines เสียงเช่นนี้แน่นอนคำสั่งสำหรับงานของฉันฉัน
Edmuntu

1
@ Edmuntu ดีใจที่ฉันสามารถช่วยถ้าคุณพบวิธีการแก้ปัญหาของคุณคุณช่วยกรุณาทำเครื่องหมายคำตอบที่เหมาะกับคุณโดยคลิกที่เครื่องหมายถูก? วิธีนี้จะช่วยเตือนผู้อื่นที่ดูหน้าของคำถามที่กำลังแก้ไข
TheOdd

1

โดยทั่วไปคุณต้องการให้สิทธิ์ของไฟล์เหมือนเดิมเมื่อทำการคัดลอกไม่ใช่สิทธิ์การสร้างเริ่มต้นชุดใหม่ นั่นหมายถึงใช้แฟล็ก -a สำหรับ cp

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