อะไรจะเป็นวิธีที่ง่ายที่สุดในการบอกเล่าเกี่ยวกับไฟล์ใหม่ล่าสุดในไดเรกทอรีไปยังเซิร์ฟเวอร์ระยะไกล
อะไรจะเป็นวิธีที่ง่ายที่สุดในการบอกเล่าเกี่ยวกับไฟล์ใหม่ล่าสุดในไดเรกทอรีไปยังเซิร์ฟเวอร์ระยะไกล
คำตอบ:
วิธีที่ง่ายที่สุดคือเรียกใช้ zsh แทน bash
rsync -a -- /path/to/directory/*(om[1,42]) remote-server:
ในวงเล็บให้เรียงom
ลำดับไฟล์ตามเวลาการแก้ไขแบบย้อนกลับ (เช่นโดยการเพิ่มอายุ) และ[1,42]
เลือกการแข่งขัน 42 รายการแรก
หากคุณต้องการไฟล์ปกติเท่านั้นและไม่ใช่ไดเรกทอรีให้เพิ่ม a .
หลังวงเล็บเปิด สำหรับความเป็นไปได้เพิ่มเติมให้ดูที่“ ตัวระบุแบบกลม” ในzshexpn
หน้าคู่มือ
หากคุณต้องการจับคู่ไฟล์ในทรีของไดเรกทอรีที่ rooted /path/to/directory
แทนที่จะใช้เฉพาะในไดเรกทอรี/path/to/directory/**/*(.om[1,42])
นั้น สิ่งนี้จะส่งไฟล์ทั้งหมดไปยังไดเรกทอรีเดียวกันบนเป้าหมาย
สมมติว่าคุณต้องการส่งไฟล์จากไดเรกทอรีการทำงานปัจจุบัน:
rsync `ls -tp | grep -v / | head -n <n>` <destination> <options>
จะทำเคล็ดลับ ตัวอย่างเช่น:
rsync `ls -tp | grep -v / | head -n 10` user@host:/dest/dir/ --progress --compress
สิ่งนี้จะทำให้เกิดข้อผิดพลาดหากไม่มีไฟล์ที่จะพบในไดเรกทอรีการทำงานปัจจุบันหรือถ้าไฟล์ด้านบนใด ๆ มีช่องว่างหรืออักขระพิเศษอื่น ๆ
`อักขระรอบ ๆls -tp | grep -v / | head -n <n>
บอกให้ทุบตีเพื่อเรียกใช้คำสั่งและแทนที่ด้วยรายการไฟล์ผลลัพธ์เป็นรายการคั่นด้วยช่องว่าง -t
ตัวเลือกที่บอกls
เพื่อจัดเรียงตามการประทับเวลาที่-p
จะบอกว่ามันจะเพิ่ม/
หลังจากที่ชื่อไดเรกทอรีและ grep ส่วนหน้าจอออกเส้นสิ้นสุด/
เพื่อให้คุณไม่สิ้นสุดการส่งไดเรกทอรีมากกว่า เพิ่ม-c
ไปยังls
ตัวเลือกหากคุณต้องการให้ตัดสินไฟล์ล่าสุดด้วยเวลาการสร้างแทนที่จะเป็นเวลาแก้ไข (แต่โปรดทราบว่าบางโปรแกรมจะลบและแทนที่ไฟล์แทนที่จะอัปเดตไฟล์เหล่านั้นเพื่อให้ ctime และ mtime สามารถเหมือนกันแม้ว่าไฟล์นั้นจะมี รับอีกต่อไป)
ฉันจะไม่อ้างว่ามันเป็นวิธีที่ง่ายที่สุดแต่ก็เป็นวิธีที่ฉันคิดไว้ก่อน
(คำถามย่อยในคำถามของ mwm)
แล้วรอบ ๆ ล่ะ? เซิร์ฟเวอร์ไปยังท้องถิ่นหรือไม่
นั่นจะซับซ้อนกว่านี้เล็กน้อยเนื่องจากฉันไม่คิดว่าคุณจะมีแหล่งไฟล์ระยะไกลได้หลายแหล่งในบรรทัดคำสั่ง rsync เหมือนกับที่คุณสามารถใช้แหล่งข้อมูลท้องถิ่นได้ คุณสามารถเรียกใช้rsync
บนเซิร์ฟเวอร์ผ่านทางssh
เปิดอุโมงค์กลับสู่ท้องถิ่นของคุณsshd
(ด้วยการssh
ร้องขอเดียวกับที่คุณเรียกใช้ rsync ผ่าน) เพื่อรับการเชื่อมต่อโดยใช้คำสั่งเดียวกันจากอีกด้านหนึ่งเป็นหลัก
\[?*
อักขระควบคุมหรืออักขระที่ไม่ใช่ ASCII)
find
กับhead
ถ้าคุณต้องการไฟล์ N ล่าสุดและไพพ์นี้ลงใน rsync คุณอาจจะต้องใช้ xargs แต่ฉันไม่รู้แน่