ขณะนี้ฉันสามารถคัดลอก.tar
ไฟล์เดียวเท่านั้น แต่ฉันจะคัดลอกไดเรกทอรีซ้ำด้วยได้scp
อย่างไร
ขณะนี้ฉันสามารถคัดลอก.tar
ไฟล์เดียวเท่านั้น แต่ฉันจะคัดลอกไดเรกทอรีซ้ำด้วยได้scp
อย่างไร
คำตอบ:
ใช่ใช้-r
:
scp -rp sourcedirectory user@dest:/path
หมายเหตุ: สิ่งนี้จะสร้างsourcedirectory
ภายใน/path
ซึ่งไฟล์จะอยู่ใน/path/sourcedirectory
-pr
(ตัวเลือกในลำดับที่กลับรายการ) จะไม่คัดลอกโฟลเดอร์ แต่จะฝังเนื้อหาไว้ในไดเรกทอรีเป้าหมาย (เห็นได้ชัดว่าลำดับตัวเลือกมีความสำคัญ)
ในขณะที่คำตอบก่อนหน้านี้ถูกต้องทางเทคนิคคุณควรพิจารณาใช้rsync
แทน rsync
เปรียบเทียบข้อมูลในด้านการส่งและรับกับกลไกต่างดังนั้นจึงไม่จำเป็นต้องส่งข้อมูลที่ถูกส่งไปก่อนหน้านี้แล้ว
rsync
หากคุณกำลังจะไปคัดลอกบางสิ่งบางอย่างไปยังเครื่องระยะไกลมากกว่าหนึ่งครั้งการใช้งาน ที่จริงแล้วมันดีที่จะใช้rsync
ทุกครั้งเพราะมันมีการควบคุมเพิ่มเติมสำหรับสิ่งต่าง ๆ เช่นการคัดลอกการอนุญาตไฟล์และการเป็นเจ้าของและการยกเว้นไฟล์หรือไดเรกทอรีบางอย่าง โดยทั่วไป:
$ rsync -av /local/dir/ server:/remote/dir/
จะประสานไดเรกทอรีท้องถิ่นกับไดเรกทอรีระยะไกล หากคุณรันครั้งที่สองและเนื้อหาของโลคัลไดเร็กทอรีไม่ได้เปลี่ยนแปลงจะไม่มีการถ่ายโอนข้อมูลซึ่งมีประสิทธิภาพมากกว่าการรันscp
และคัดลอกทุกอย่างทุกครั้ง
นอกจากนี้ยังช่วยให้คุณสามารถกู้คืนจากการโอนขัดจังหวะได้อย่างง่ายดายมากซึ่งแตกต่างจากrsync
scp
ในที่สุดรุ่นที่ทันสมัยของการrsync
เริ่มต้นทำงานมากกว่า ssh ดังนั้นหากscp
ทำงานอยู่แล้วrsync
ควรแทนที่การดรอปอิน
rsync
มีประสิทธิภาพมากขึ้น สิ่งหนึ่งที่ไม่ทำในขณะนี้scp
คืออนุญาตให้คัดลอกระหว่างโฮสต์ระยะไกล (อย่างน้อยโดยไม่เรียกใช้ไคลเอ็นต์ rsync กับหนึ่งในนั้น)
-av
: v สำหรับ verbose, สำหรับการเก็บถาวรและเป็นทางลัดไปยัง -rlptgoD ซึ่งหมายถึงการเรียกซ้ำ, รักษาวันที่และสิทธิ์ของเจ้าของลิงก์ ถ้าคุณต้องการใช้แบบเรียกซ้ำ-r
นั่นคือสิ่งที่เป็น-r
ตัวเลือกสำหรับ :)
ดูหน้า man scpสำหรับข้อมูลเพิ่มเติมหากจำเป็น
ตัวเลือกการคัดลอกซ้ำ '-r' (ตัวพิมพ์เล็ก)
scp -r
ซึ่งฉันสับสนกับตัวเลือกการทำซ้ำแบบโลคอลทั่วไป '-R' (ตัวพิมพ์ใหญ่)
cp -R
วิธีที่ดีที่สุดคือใช้ rsync ผ่าน SSH
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
ตัวเลือกรายการโปรดของฉันคือ -Pazvessh - ลบ:
rsync
ที่ฉันใช้จะใช้เป็นssh
ค่าเริ่มต้นดังนั้นจึง-essh
ไม่จำเป็นต้องใช้ และตัวเลือกของคำสั่งที่ใช้เชื่อมต่อกับรีโมตโฮสต์นั้นไม่เกี่ยวข้องกับการคัดลอกซ้ำ ๆ
หลังจากค้นหาการตั้งค่าสถานะการคัดลอกซ้ำและใช้งานได้สำเร็จขอบคุณโพสต์นี้ฉันต้องการโพสต์เพียงข้อเสนอแนะ
หากเป็นกรณีที่คุณกำลังคัดลอก (ซ้ำ) ไดเรกทอรี บางทีถ้าไฟล์ถูกบีบอัดคุณสามารถประหยัดเวลาในการถ่ายโอนได้
สิ่งที่ฉันทำในท้ายที่สุดคือ:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
หวังว่านี่จะช่วยได้
.tar.gz
หรือ.tgz
ตั้งแต่ไฟล์เป็นไฟล์เก็บถาวร gzipped tar (เนื่องจาก-z
มีการใช้แฟล็ก)
คุณสามารถคัดลอกไดเรกทอรีซ้ำไปยังที่เก็บถาวรที่บีบอัดด้วยคำสั่งง่ายๆนี้:
ssh -p 22 user@address-to-copy-from.com 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
ตัวอย่างเช่นหากต้องการคัดลอกเนื้อหา/var/log
จากdomain.com
ไปยัง~/logs.tgz
คุณให้เรียกใช้:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' > ~/logs.tgz
คุณยังสามารถแตกไฟล์บนระบบเป้าหมายโดยใช้ไพพ์ คำสั่งนี้จะคัดลอกเนื้อหาของ/var/log
ที่domain.com
ไป~/destination/log
ในระบบของคุณ:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
แม้ว่าจะทำมิเรอร์ไดเรกทอรีคุณควรใช้rsync
...
หากคุณต้องการส่งรหัสผ่านของผู้ใช้เป็นพารามิเตอร์แทนที่จะป้อนเป็นแบบโต้ตอบคุณสามารถใช้sshpass
( sudo apt-get install -y sshpass
)
ตัวอย่าง:
sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder
คุณสามารถใช้อ็อพชัน -r พร้อมกับคำสั่ง scp เพื่อคัดลอกไดเร็กทอรีซ้ำบนระบบใด ๆ หากคุณต้องการสิ่งอื่นดูกวดวิชาคำสั่ง SCP ตัวเลือก -r หมายถึงการดำเนินการซ้ำในส่วนใหญ่ของคำสั่ง Linux
-r
ตัวเลือกได้รับการแนะนำเมื่อหลายปีก่อนและเป็นคำตอบที่ได้รับการยอมรับ
ตัวเลือกอื่น (น่าจะดีกว่าสำหรับการใช้ซ้ำ) คือการใช้ NFS - ดูที่ nfs-kernel-server และวิธีการตั้งค่าการแบ่งปัน NFS
scp
แต่ NFS ไม่ใช่ตัวเลือก