การใช้ scp เพื่อถ่ายโอนรายชื่อไฟล์. txt


4

ฉันมีไฟล์ 1.6 ล้านไฟล์บนเซิร์ฟเวอร์ A และมีเพียง 20k เท่านั้นที่ต้องไปยังเซิร์ฟเวอร์ B ปลายทางเซิร์ฟเวอร์ B อยู่บนโฮสติ้งที่ใช้ร่วมกันของ GoDaddy ดังนั้นฉันจึง จำกัด เพียง scp สำหรับการถ่ายโอนไฟล์จำนวนมากในครั้งเดียว

ฉันต้องการสร้างไฟล์. txt ของไฟล์ 20k + จากการสืบค้น SQL จากนั้นป้อนรายการนั้นลงใน scp มีตัวเลือกให้ทำเช่นนั้น?

cat /proc/version ให้ฉัน Linux version 2.6.32-531.23.3.lve1.2.65.el6.x86_64 (mockbuild@koji.cloudlinux.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Tue Aug 19 10:37:27 EDT 2014


ดังนั้นชื่อไฟล์จะถูกเก็บไว้ในฐานข้อมูล sql หรือไม่ rsync ยังมีอยู่ไหม นี้จะเป็นที่ต้องการ หาก scp ตายกลางการถ่ายโอนคุณจะต้องหาว่าอะไรที่ถ่ายโอนและอะไรที่ไม่ rsync จะทำส่วนนั้นให้คุณ
Nathan Powell

@NathanPowell rsync เป็นความคิดแรกของฉันเช่นกัน แต่ GoDaddy มีจำนวนมากในการติดตั้งซอฟต์แวร์ใหม่ผ่าน SSH ใช่เส้นทางของไฟล์อยู่ในฐานข้อมูล SQL แต่ฉันสามารถแยกไฟล์เหล่านั้นออกเป็นไฟล์ข้อความได้อย่างง่ายดาย
Morgan Delaney

คำตอบ:


6

หากคุณมีไฟล์ข้อความที่สร้างไว้แล้วให้ทำดังต่อไปนี้

cat /location/file.txt | xargs -i scp {} user@server:/location

นี้จะไปทีละบรรทัดของการส่งออกของ file.txt และเรียกใช้ scp comamand ต่อบรรทัด; ฉันหวังว่านี่จะช่วยได้.


มันใกล้เข้ามาแล้วจริงๆขอบคุณ! ฉันต้องการให้กระบวนการนี้ดำเนินไปด้วยดีและฉันเกรงว่าจะดำเนินการทีละบรรทัดซึ่งจะขอรหัสผ่านของฉันบนเซิร์ฟเวอร์ระยะไกลทุกบรรทัด ฉันลองใช้คีย์ SSH แต่ไม่ประสบความสำเร็จบางทีฉันแค่ทำไม่ถูกต้อง คีย์ SSH จะเป็นตัวเลือกเดียวของฉันสำหรับกระบวนการนั้น
Morgan Delaney

มันใช้งานได้ดีอย่างน่าอัศจรรย์! สิ่งที่ฉันทำแทน xargs บน scp การโทรถูกใช้งาน xargs บน cp บนเซิร์ฟเวอร์ระยะไกลเพื่อแยกไฟล์ไปยังไดเรกทอรีค่อนข้างชอบ: cat files.txt | xargs -l bash -c 'cp $0 $1'จากนั้นใช้เพียงครั้งเดียว scp คำสั่งเพื่อดึงไดเรกทอรีนั้น ขอบคุณ!
Morgan Delaney

1

คำตอบที่ให้นั้นใช้งานได้ดี ฉันใช้ xargs -a เพื่อส่งไฟล์ออกมาตรฐาน จากนั้นฉันก็รวมมันเข้ากับคำตอบดั้งเดิมของ cat /location/file.txt | xargs -i scp {} user@server:/location

คำตอบของฉัน:

xargs -a /location/file.txt | xargs -i scp {} user@server:/location

ประโยชน์ของการ xargs -a มากกว่าการใช้ cat? cat เป็นแบบพกพามากขึ้นตามความพร้อมของ -a สำหรับ xargs ขึ้นอยู่กับระบบ
ephsmith

0

คำตอบข้างต้นกำหนดให้คุณต้องตรวจสอบสิทธิ์สำหรับทุกไฟล์ที่ถ่ายโอน SCP ทำงานบน SSH และ GoDaddy ให้การเข้าถึงคำสั่งอื่น ๆ ผ่าน SSH เช่น tar ดังนั้นวิธีที่ดีที่สุดคือใช้ tar กับ ssh ผ่านทาง:

tar -T <file> -cf - | ssh <user>@<host> "tar -C <dir> -xvf -"

หากรายการไฟล์อยู่ใน STDIN คุณสามารถทำสิ่งต่อไปนี้แทน: บันทึก: cat ถูกใช้ที่นี่เพื่อสร้าง STDIN เท่านั้น

cat <file> | tar -T - -cf - | ssh <user>@<host> "tar -C <dir> -xvf -"

สำหรับเวลาการถ่ายโอนที่ลดลงด้วยต้นทุนของเวลาในการประมวลผลเพิ่มเติมคุณสามารถเพิ่ม -z หรือ -j ลงในทั้งสองคำสั่ง tar เพื่อเปิดใช้งานการบีบอัด gzip หรือ bzip ตามลำดับ


0

ฉันต้องการทำแบบเดียวกันสำหรับรายการโฟลเดอร์และไม่มีคำตอบให้ใช้ xargs ทำงานให้ฉัน ในที่สุดฉันก็แก้ไขได้อย่างง่ายดายด้วย:

scp -r user@server:/location/{"$(cat folder_list.txt | tr '\n' ',' | sed 's/,$//')"} .

ฉันจะส่งรายการไฟล์ไปยังส่วนขยายเชลล์ได้ที่ไหน ฉันคิดว่านี่อาจเป็นประโยชน์กับทุกคนที่กำลังมองหาวิธีการอื่น

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