ฉันจะคัดลอกเนื้อหาของโฟลเดอร์ไปยังโฟลเดอร์อื่นในไดเรกทอรีอื่นด้วยเทอร์มินัลได้อย่างไร


740

ฉันกำลังพยายามคัดลอกเนื้อหาของโฟลเดอร์ไปยังโฟลเดอร์อื่นในไดเรกทอรีอื่นโดยใช้เทอร์มินัล

ใครบางคนจะสามารถให้ตัวอย่างของไวยากรณ์บรรทัดคำสั่งที่จำเป็นเพื่อให้บรรลุนี้

คำตอบ:


1115

คุณสามารถคัดลอกเนื้อหาของโฟลเดอร์/sourceไปยังโฟลเดอร์อื่นที่มีอยู่/destด้วยคำสั่ง

cp -a /source/. /dest/

-aตัวเลือกเป็นตัวเลือกที่ดีขึ้น recursive ที่รักษาแอตทริบิวต์แฟ้มทั้งหมดและยังรักษา symlinks

ส่วน.ท้ายของพา ธ ต้นทางคือcpไวยากรณ์เฉพาะที่อนุญาตให้คัดลอกไฟล์และโฟลเดอร์ทั้งหมดรวมถึงไฟล์ที่ถูกซ่อน


@enzotib ฉันกำลังพยายามใช้คำสั่งนี้เพื่อคัดลอกเนื้อหาของ "ดาวน์โหลด / textext" เป็น "~ / .config / inkscape / extensions /." ใช้คำสั่งของคุณฉันพิมพ์ "cp -a / Downloads / textext /. /~/.config/inkscape/extensions/" แต่สิ่งนี้ใช้ไม่ได้
Funzies

@Funzies: น่าจะเป็นคำสั่งของคุณ:cp -a ~/Downloads/textext/. ~/.config/inkscape/extensions/
enzotib

เพิ่มการ-pตั้งค่าสถานะเพื่อรักษาสิทธิ์ของไฟล์และการประทับเวลา cp -ap /var/www/original.com/images/. /var/www/new.com/images/
Dylan Valade

3
@DylanValade: -aแล้วก็หมายความว่ามีความกว้างมากกว่า--preserve=all -p = --preserve=mode,ownership,timestamps
enzotib

1
@BennyNeugebauer: scpใช้เพื่อคัดลอกผ่านเครือข่าย (ผ่านssh) และเข้ารหัสเฉพาะช่องทางการสื่อสารเท่านั้นไม่ใช่ไฟล์ในระบบไฟล์ปลายทาง
enzotib

129

ทางเลือกคือ rsync

rsync -r source/ destination

ข้อดีของ rsync คือ:

  1. หลังจากการซิงค์ครั้งแรกมันจะคัดลอกเฉพาะไฟล์ที่มีการเปลี่ยนแปลง

  2. คุณสามารถใช้งานผ่านเครือข่ายสะดวกสำหรับไฟล์ใน $ HOME โดยเฉพาะไฟล์กำหนดค่า


5
ฉันคิดว่าคุณไม่จำเป็นต้องใช้ดอกจัน rsync -r source/ destinationควรจะเพียงพอไม่
Joschua

1
อันนี้เหมาะสมกว่า: 'rsync -rtvp source / * destination'
shridutt kothari

-r ไม่ทำงานกับไฟล์ / โฟลเดอร์ที่ซ่อนอยู่
Nam G VU

1
สิ่งนี้จะไม่คัดลอกไฟล์ที่ซ่อนอยู่เนื่องจาก bash จะขยายเฉพาะไฟล์ที่ไม่ได้ซ่อน การแก้ปัญหาโดย @Joschua ปลอดภัยยิ่งขึ้น
sauerburger

rsync จะคัดลอกไดเรกทอรีทั้งหมดรวมถึงไฟล์ที่ซ่อนอยู่หากคุณใช้การต่อท้าย / ไม่มี * ดังนั้นrync source/ destผู้ใช้จะต้องปรับแต่งคำสั่ง rsync ให้ทำงานตามที่ต้องการ
Panther

78

ช่วยบอกว่าคุณมีโฟลเดอร์ที่เรียกว่าfolder1ในของคุณ~ภายในfolder1เป็น 1 ไฟล์ที่เรียกว่าfile1และ 2 โฟลเดอร์ที่เรียกว่าsub1และsub2แต่ละกับไฟล์และโฟลเดอร์อื่น ๆ ภายในพวกเขา

เพื่อคัดลอกเนื้อหาทั้งหมดของ~/folder1ไปยัง~/new_folder1คุณจะใช้

cp -r ~/folder1/. ~/new_folder1

new_folder1folder1จากนั้นก็จะมีไฟล์และโฟลเดอร์ทั้งหมดจาก

cpเป็นคำสั่งที่จะคัดลอกโดยใช้เทอร์มินัล-rทำให้เรียกซ้ำ (ดังนั้นไดเรกทอรีปัจจุบัน + ไดเรกทอรีเพิ่มเติมภายในปัจจุบัน) ~/folder1เป็นโฟลเดอร์ต้นทาง~/new_folder1เป็นโฟลเดอร์ปลายทางสำหรับไฟล์ / โฟลเดอร์ภายในจุดเริ่มต้น


5
ไม่จับไฟล์ที่ซ่อนอยู่
Portablejim

1
ขอบคุณบรูโน่! มันช่วยให้ฉันเข้าใจไวยากรณ์แม้ว่าฉันต้องเปลี่ยนมันเล็กน้อย (ลบ ~ เครื่องหมาย) อาจเป็นเพราะโฟลเดอร์ปลายทางอยู่ใน / opt ซึ่งอยู่ในระบบไฟล์อื่น และขอขอบคุณ Portablejim ที่จะจำสิ่งที่ซ่อนอยู่ในไฟล์!
pandisvezia

4
ระยะเวลาต่อท้ายเป็นสิ่งสำคัญ หากไม่มีมันบางครั้งมันอาจสร้างไดเรกทอรีย่อยใหม่~/new_folder1/folder1แทนการคัดลอกเนื้อหาไป
wisbucky

1
ทำไมไม่cp -r ~/folder1/* ~/new_folder1
Alex78191

@ Alex78191[root@ home]# mkdir food [root@ home]# cd food/ [root@ food]# mkdir .fruit [root@ food]# mkdir veggies [root@ food]# touch veggies/carrots [root@ food]# touch .fruit/apple [root@ food]# ls * carrots [root@ food]#
Bruno Pereira

14

ตรวจสอบhttp://www.cyberciti.biz/faq/copy-folder-linux-command-line/สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการคัดลอกโฟลเดอร์ หวังว่านี่จะช่วยได้

cp Command

cpเป็นคำสั่ง Linux สำหรับการคัดลอกไฟล์และไดเรกทอรี ไวยากรณ์มีดังนี้:

cp source destination
cp dir1 dir2
cp -option  source destination
cp -option1 -option2  source destination

ในตัวอย่างนี้คัดลอก/home/vivek/lettersโฟลเดอร์และไฟล์ทั้งหมดไปยัง/usb/backupไดเรกทอรี:

cp -avr /home/vivek/letters /usb/backup

ที่ไหน

-a : สงวนแอตทริบิวต์ที่ระบุเช่นโหมดไดเรกทอรีของไฟล์ความเป็นเจ้าของการประทับเวลาหากมีแอตทริบิวต์เพิ่มเติมที่เป็นไปได้: บริบทลิงก์ xattr ทั้งหมด

-v : อธิบายสิ่งที่กำลังทำ

-r: คัดลอกไดเรกทอรีซ้ำ ตัวอย่าง

คัดลอกโฟลเดอร์ชื่อ / tmp / conf ไปยัง / tmp / backup:

$ cp -avr /tmp/conf/ /tmp/backup

3
นี่ไม่ใช่คำถามที่ถาม
AStopher

(การใช้ -r กับ -a ซ้ำซ้อน; บน gnu cp -a เหมือนกับ "-dr --preserve = all")
cristoper

1
cp: ตัวเลือก -R และ -r อาจไม่ได้ระบุไว้ด้วยกัน
IgorGanapolsky

4

ตัวอย่างง่ายๆ

คัดลอกไดเรกทอรี dir_1 และเนื้อหา (_files_)ลงในไดเรกทอรีdir_2 :

cp -r ./dir_1 ./dir_2
# or
cp -r ./dir_1/ ./dir_2/
# Results in: ./dir_2/dir_1/_files_

คัดลอกเนื้อหา (_files_) เพียง dir_1ลงในไดเรกทอรีdir_2 :

cp -r ./dir_1/. ./dir_2
# or
cp -r ./dir_1/. ./dir_2/
# Results in: ./dir_2/_files_*

_files_ เป็นตัวยึดตำแหน่งสำหรับไฟล์จริงที่อยู่ในไดเรกทอรี


2

หากมีสองโฟลเดอร์: (ด้วยการอนุญาตให้เขียน)

drwxr-xr-x 4 vimal vimal  4096 Sep  9 12:17 .
drwxr-xr-x 3 root  root   4096 Aug 18 14:35 ..
drwxrwxrwx 6 vimal vimal  4096 Sep  9 12:15 DATA
drwxrwxrwx 7 vimal vimal  4096 Sep  9 12:15 PORTAL

หากคุณอยู่ในโฟลเดอร์ชื่อ PORTAL ที่คุณต้องการคัดลอกเนื้อหาทั้งหมดของโฟลเดอร์อื่นว่า DATA ในระดับเดียวกันคุณจะทำ

vimal@vimal-D3H:/var/www/html/PORTAL$ cp -a ../DATA/. .

คุณต้องสังเกตเห็น 2 จุด จุดสุดท้ายพูดว่าคัดลอกที่นี่ในโฟลเดอร์ปัจจุบัน

และ

กำลังติดตาม / DATA / ระบุว่าเนื้อหาทั้งหมดภายในโฟลเดอร์ DATA ที่จะคัดลอกไม่ใช่โฟลเดอร์ DATA เอง

หากคุณลบส่วนท้ายนี้ "." จาก / DATA /

จากนั้นโฟลเดอร์ DATA ทั้งหมดจะถูกคัดลอกภายใน PORTAL (จากตำแหน่งที่คุณเผชิญปัญหา)

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