ฉันจะให้ rsync ละเว้นไฟล์ที่หายไปได้อย่างไร


9

ฉันกำลังรันคำสั่งดังต่อไปนี้กับระบบที่แตกต่างกัน:

$ rsync -a -v foo@machine.company.com:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/.

บางครั้ง * .log ไม่มีอยู่และก็ไม่เป็นไร แต่ rsync จะสร้างข้อผิดพลาดต่อไปนี้:

receiving file list ... rsync: link_stat "/path/to/first/*.log" failed: No such file or directory (2)
done

มีวิธีใดที่จะระงับสิ่งนี้ได้หรือไม่? วิธีเดียวที่ฉันคิดได้ก็คือใช้ตัวกรองรวมและตัวกรองที่ไม่รวมซึ่งดูเหมือน PITA สำหรับฉัน ขอบคุณ!

คำตอบ:


10

ฉันคิดว่าคำตอบของคำถามนั้นอธิบายไว้ได้ดีที่สุดในคำตอบนี้:

https://stackoverflow.com/a/27637277/1236128

--ignore-missing-args

น่าเสียดายที่รุ่นต่อ ๆ มามีฟังก์ชั่นนี้เท่านั้น ฉันใช้ RHEL 7 กับ rsync 3.0.9 ซึ่งดูเหมือนจะไม่มีตัวเลือกนี้


2

เพื่อชี้แจงคุณต้องการที่จะไม่เห็นข้อผิดพลาดหรือไม่ สำหรับกรณีนี้คุณสามารถเปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานได้ แต่คุณอาจพลาดข้อผิดพลาดร้ายแรงที่คุณอาจต้องการทราบ

ตัวอย่างเอาต์พุตข้อผิดพลาดการเปลี่ยนเส้นทาง

rsync -a -v foo@machine.company.com:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/ 2>/dev/null

หากคุณต้องการพลาดข้อผิดพลาดในไฟล์ที่ไม่มีอยู่แทนคุณไม่สามารถเปลี่ยนตัวกรอง rsync * .log และคุณต้องการหลีกเลี่ยงการใช้งานรวมคุณสามารถรวมไว้ในสคริปต์เพื่อดำเนินการตาม เงื่อนไข.

ตัวอย่างสคริปต์

#!/bin/sh
# Script to Handle Rsync based on Log File Existence
if [ "$(ls -A /path/to/first/*.log > /dev/null > 2&1)" ]; then
     # Log Exists Use This Rsync
    rsync -a -v foo@machine.company.com:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/
else
    # Log Does Not Exist Use This Rsync
    rsync -a -v foo@machine.company.com:'path/to/second.txt' /dest/folder/0007/
fi

หวังว่าฉันจะช่วย

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