ฉันจะคัดลอกไฟล์และไดเรกทอรีทั้งหมดยกเว้นบางไฟล์ผ่าน ssh ได้อย่างไร


23

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

คำตอบ:


19

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


rsync ไม่ได้ใช้ SSH โดยอัตโนมัติ - คุณต้องระบุแฟล็ก "-e ssh" เพื่อทำเช่นนั้น

4
ใช่แล้ว. Rsync 2.6.0 รีลีส - รีโมตเชลล์เริ่มต้นตอนนี้เป็น "ssh" ยกเว้นว่าคุณบอกการกำหนดค่าที่คุณต้องการให้เป็นอย่างอื่นเป็นค่าเริ่มต้น samba.org/rsync

12

คุณสามารถลองrsyncซึ่งคัดลอกเฉพาะไฟล์ที่มีการเปลี่ยนแปลงเท่านั้น


9

การใช้rsync --excludeเป็นตัวเลือกที่ชัดเจนมากขึ้นที่นี่ แต่ถ้าคุณต้องการส่งไฟล์หรือโฟลเดอร์เพียงเล็กน้อยและมีบางอย่างที่ไม่รวมคุณสามารถใช้ shell globing scpได้ ก่อนอื่นตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าตัวเลือกที่เหมาะอย่างยิ่งในเปลือกของคุณ สำหรับการทุบตีการทำงานและการใช้งานshopt -s extglob zsh setopt ksh_globจากนั้นบางสิ่งเช่นนี้:

scp /path/to/folder/!(tiny_mce|other_folder|*.bak) user@host:target_path

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


7

rsync เป็นทางออกที่ดี แต่หากคุณกำลังมองหาทางเลือก:

สมมติว่าเรามีไดเรกทอรี "ทดสอบ" ที่มีไดเรกทอรี "foo, bar, baz" ในไฟล์เหล่านี้เป็นไฟล์ประเภทต่าง ๆ :

test
|____bar
| |____1.jpg
| |____1.png
| |____1.txt
| |____2.jpg
| |____2.png
| |____2.txt
|____baz
| |____1.avi
| |____2.avi
| |____3.png
|____foo
| |____test.blah
|____test.txt

เราต้องการคัดลอกทุกอย่างยกเว้น PNG

scp $(find /location/of/test -type f ! -name "*.png") # -> Note the logical NOT!!

ในตัวอย่างนี้คำสั่งจะนำไฟล์ทั้งหมดไปไว้ในไดเรกทอรีปลายทางเดียวกัน - นี่อาจไม่ใช่พฤติกรรมที่คุณต้องการ


1
โปรดทราบว่าคำตอบนี้ใช้ได้เฉพาะเมื่อชื่อไฟล์และไดเรกทอรีที่เกี่ยวข้องไม่มีอักขระพิเศษของเชลล์ (ช่องว่างหรือ\[*?)
Gilles 'ดังนั้นหยุดความชั่วร้าย'

3

เครื่องมือที่ยอดเยี่ยมที่คุณอาจต้องการลองใช้คือ "lftp"

lftp sftp://etc.etc/ 
lftp> ls 
    --- remote listing ---
lftp> mirror -R -n local/ remote/

นอกจากนี้คุณยังสามารถใช้ RSync ผ่าน ssh

rsync -avzp -e ssh /this/dir/  remoteuser@remotehost:/remote/dir/

ควรทำงาน.


0

ฉันเพิ่งเขียนว่าฉันชอบพร้อมเพรียง rsyncทุกวันเพราะมัน

  • ไม่จำเป็นต้องมีดีมอนนอกจาก ssh สำหรับการขนส่ง
  • ให้ฉันแก้ไขไฟล์ได้ทั้งสองด้านได้ตลอดเวลา - หลายตัวควบคุมได้อย่างง่ายดายในขณะที่ฉันเพียงต้องการส่งคำขอซิงค์จากด้านเดียว
  • ฉันเป็น stickler เมื่อพูดถึง modtimes, คุณสมบัติ / การอนุญาต, ซอฟต์ลิงค์เป็นต้นไม่มีปัญหากับมัน; สำหรับโครงการหนึ่งที่ฉันใช้ 4 มิร์เรอร์โครงการหนึ่งเป็นโฮสต์ cygwin ดูตัวอย่างการตั้งค่า crontab ของฉัน
  • *.bakการยกเว้นการสนับสนุนเช่น ตัวอย่างในไฟล์ปรับแต่งของฉัน

0

ใช้ Secure Copy - scp

scp -r file user@host:

เพื่อคัดลอกไฟล์จำนวนมาก

scp /directory/* user@host:destinationPath

เพื่อคัดลอกไฟล์บางไฟล์

scp /directory/!(*.doc) user@host:destinationPath

มันคัดลอกเนื้อหาของไดเรกทอรียกเว้น ไฟล์. doc


0

ฉันขอแนะนำให้คุณ rsync

rsync -vra --exclude = "สิ่งที่คุณต้องการยกเว้น" -e ssh user user @ remotehost: / folder


0

นี่คือสิ่งที่ทำงานสำหรับฉันเมื่อฉันวิ่งจากเซิร์ฟเวอร์ปลายทาง

rsync -av --progress user@servername:/sourcefolder /destinationfolder --exclude thefoldertoexclude

0

เราสามารถทำได้สองขั้นตอนในการข้ามtiny_mceไดเรกทอรี สมมติว่าไดเรกทอรีทั้งหมดเริ่มต้นด้วยตัวอักษรตัวพิมพ์เล็ก

scp -r USER@HOSTNAME:~/FOLDER/[a-s]* .
scp -r USER@HOSTNAME:~/FOLDER/[u-z]* .

นอกจากนี้ให้เปลี่ยน USER, HOSTNAME และ FOLDER เป็นค่าจริง

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