วิธีการคัดลอกไฟล์ทั้งหมดจากไดเรกทอรีไปยังไดเรกทอรีระยะไกลโดยใช้ scp?


68

เป้าหมายของฉันคือคัดลอกเฉพาะไฟล์ทั้งหมดจาก~ / local_dirไปยังuser@host.com / var / www / html / target_dirโดยใช้scpและอย่าสร้างหมวดหมู่ local_dir ใน local_dir

/var/www/html/target_dir/files..

แต่ไม่

/var/www/html/target_dir/local_dir/files.. เมื่อใช้พารามิเตอร์ -r


1
ไม่scp * user@host.com:/var/www/html/target_dirได้ทำในสิ่งที่คุณต้องการ? ถ้าเป็นเช่นนั้นโปรดแก้ไขด้วยรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่คุณพยายามทำ & ลองมาแล้ว
Michael Homer

ผนวก /. ไม่ทำงานอีกต่อไป เพิ่มเติมได้ที่นี่
Tsulatsi Tamim

คำตอบ:


91

scp มีอาร์กิวเมนต์ -r ดังนั้นลองใช้:

$ scp -r ~/local_dir user@host.com:/var/www/html/target_dir

อาร์กิวเมนต์ -r ทำงานเหมือนกับ -r arg ใน cp มันจะถ่ายโอนโฟลเดอร์ทั้งหมดของคุณและไฟล์และไดเรกทอรีย่อยทั้งหมดภายใน


5
คำสั่งของคุณสร้างlocal_dirไดเรกทอรีใน / var / www / html / target_dir เป้าหมายของฉันคือคัดลอกเฉพาะไฟล์
Edgaras Karka

ขออภัยฉันเข้าใจผิด จากนั้นทำซ้ำคำสั่ง แต่เช่นนี้$ scp -r ~/local_dir user@host.com:/var/www/html/แล้วเปลี่ยนชื่อไดเรกทอรีใหม่หากจำเป็น
parazyd

8
หรือ$ scp -r ~/local_dir/* user@host.com:/var/www/html/target_dirอะไรก็ตามที่ลอยเรือของคุณ
parazyd

วิธีแยกไดเรกทอรีบางตัวออกจากโลคัลขณะทำการคัดลอกไปยังรีโมต
Sushivam

13
เปลี่ยน wildcard *เป็นจุด.และคุณจะคัดลอกเนื้อหาไดเรกทอรี (รวมถึงไฟล์ dot) โดยไม่ต้องคัดลอกไดเรกทอรีเอง scp -pr ~/local_dir/. user@example.com:/path/to/target_dir
roaima

19

ถ้าเป้าหมายของคุณคือการถ่ายโอนไฟล์ทั้งหมดจากสัญลักษณ์แทนไม่หลอกลวง:local_dir*

$ scp ~/local_dir/* user@host.com:/var/www/html/target_dir

-rตัวเลือกหมายความว่า "ซ้ำ" ดังนั้นคุณต้องเขียนมันเมื่อคุณกำลังพยายามที่จะถ่ายโอนสารบบทั้งหมดหรือหลายไดเรกทอรี

จากman scp:

-r 
Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.

ดังนั้นหากคุณมีไดเรกทอรีย่อยอยู่ภายในlocal_dirตัวอย่างสุดท้ายจะถ่ายโอนไฟล์เท่านั้น แต่ถ้าคุณตั้งค่า-rตัวเลือกมันจะถ่ายโอนไฟล์และไดเรกทอรี


1+ เพราะคุณต้องอ่านความคิดเห็นในคำตอบที่ได้รับการยอมรับเพื่อไปที่คำตอบที่ถูกต้องในขณะที่คำตอบนี้จะอธิบายโดยตรง
André Christoffer Andersen

17

การผนวก/.ไปยังไดเรกทอรีต้นทางของคุณจะถ่ายโอนเนื้อหาของมันแทนที่จะเป็นไดเรกทอรีเอง ตรงกันข้ามกับโซลูชัน wildcard ซึ่งจะรวมไฟล์ที่ซ่อนไว้ด้วย

$ scp -r ~/local_dir/. user@host.com:/var/www/html/target_dir

เครดิตสำหรับโซลูชันนี้ไปที่ roaima แต่ฉันคิดว่าควรโพสต์เป็นคำตอบจริงไม่ใช่แค่ความคิดเห็น


0

ทำตามขั้นตอนเหล่านี้:

  1. คัดลอกไดเรกทอรีที่local_dirมีไดเรกทอรีย่อยทั้งหมด:

    scp -r ~/local_dir user@host.com /var/www/html/target_dir
    
  2. คัดลอกเฉพาะเนื้อหาlocal_dirและไม่ใช่ไดเรกทอรีlocal_dir:

    scp -r ~/local_dir/* user@host.com /var/www/html/target_dir
    
  3. อย่าใช้: scp -r ~/local_dir/. user@host.com /var/www/html/target_dirเนื่องจากมีข้อผิดพลาด (เพิ่งทดสอบและได้รับข้อผิดพลาดต่อไปนี้):

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