ฉันต้องการส่งออกท่อของ find ในรายการอินพุตของ scp ได้อย่างไร


10

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

นี่คือสิ่งที่ฉันมักจะพิมพ์สำหรับรายการอาร์กิวเมนต์สั้น ๆ

scp ./* phogan@computer/directory...

นี่ฉันคิดว่านี่อาจแปลด้วยการค้นหา

scp find . -name "*" phogan@computer/directory...

บางทีฉันสามารถใช้ท่อได้? ข้อเสนอแนะใด ๆ ที่จะช่วย ขอบคุณล่วงหน้า.

คำตอบ:


16
find . -name "*" -exec scp '{}' phogan@computer:/directory ';'

โดยปกติฉันจะ 'tar' ไฟล์ทั้งหมดเข้าด้วยกันเป็นหยดขนาดใหญ่และเรียก 'scp' เพียงครั้งเดียว บางสิ่งเช่นนี้

tar czfv - file1 file2 dir1 dir2 | ssh phogan@computer/ tar xvzf - -C directory
  • เราสามารถเล่นกับ --exclude = หรือ --include = พารามิเตอร์ของ tar
  • อีกตัวเลือกหนึ่งที่จะใช้rsync

หากใช้รหัสผ่านกับ ssh / scp โซลูชันจะไม่ค้นหาถามรหัสผ่านในทุกไฟล์หรือไม่
ต้มตุ๋น Quixote

ช่วยให้เพียงสมมติเขารู้วิธีการใช้ SSH คีย์ :) ปัญหา 1000 คำถามรหัสผ่านยังเป็นเหตุผลสำหรับน้ำมันดินวิธีการ
akira

15

คุณสามารถทำได้ด้วยคำสั่งscpเดียว

  • สำหรับรุ่นที่ใหม่กว่าscp:
scp `find <path> -name <expression>` user@host:<path_where_to_copy>
  • สำหรับรุ่นเก่า:
scp --exec=`find <path> -name <expression>` user@host:<path_where_to_copy>

ให้แน่ใจว่าจะแค็ปซูfindคำสั่งในระหว่างbackticks `และไม่ใช่คำพูดเดียว'


เวอร์ชันของ scp ใดที่ linux กระจายอยู่ เช่น scp ใน Ubuntu 14.04 ไม่มีตัวเลือกนี้
geekQ

2
สวัสดีรุ่นเก่ารองรับเวอร์ชันใหม่รองรับคำสั่งที่ง่ายกว่า:scp `find <path> -name <expression>` user@host:<path_where_to_copy>
Carlos Rodrigues

1
ใช้งานไม่ได้กับหลายไฟล์
Amruta

@Amruta ใช้-r
slybloty

@slybloty ใช้scp -rสำหรับเรียกซ้ำในรายการเดียว (ไดเรกทอรี) ไม่ใช่สำหรับหลายรายการ (หลายไฟล์)
AndrewF


1

ฉันจะแนะนำ

find . -print0 | tar --null --files-from=/dev/stdin -cf - | ssh phogan@computer tar -xf - -C /directory

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

สิ่งที่ต้องระวังก็คือชื่อไฟล์อาจมีช่องว่าง ซึ่งหมายความว่าการวนรอบสำหรับการทุบตีอาจมีปัญหากับรายการชื่อไฟล์

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