Bagaimana saya bisa membuat rsync mengabaikan file yang hilang?

9

Saya menjalankan perintah seperti berikut ini ke beberapa sistem yang berbeda:

$ rsync -a -v [email protected]:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/.

Terkadang * .log tidak ada, dan itu OK, tetapi rsync menghasilkan kesalahan berikut:

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

Apakah ada cara untuk menekan itu? Satu-satunya cara yang bisa saya pikirkan adalah menggunakan filter sertakan dan singkirkan, yang sepertinya merupakan PITA bagi saya. Terima kasih!

Joe Casadonte
sumber

Jawaban:

10

Saya pikir jawaban atas pertanyaan tersebut paling baik dijelaskan dalam jawaban ini:

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

--ignore-missing-args

Sayangnya, hanya versi yang lebih baru yang memiliki fungsi ini. Saya menjalankan RHEL 7 dengan rsync 3.0.9, yang sepertinya tidak memiliki opsi ini.

Jonathan Komar
sumber
2

Untuk memperjelas, Anda hanya ingin 'tidak melihat' kesalahannya? Untuk itu, Anda bisa mengarahkan Output Kesalahan Standar, tetapi Anda mungkin akan melewatkan kesalahan yang lebih serius yang mungkin ingin Anda ketahui.

Contoh Keluaran Kesalahan Pengalihan

rsync -a -v [email protected]:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/ 2>/dev/null

Jika Anda hanya ingin melewatkan kesalahan pada file yang tidak ada, Anda tidak dapat mengubah filter rsync * .log dan Anda ingin menghindari penggunaan include, Anda bisa membungkusnya dalam skrip untuk melanjutkan berdasarkan pada kondisi.

Contoh Skrip

#!/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 [email protected]:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/
else
    # Log Does Not Exist Use This Rsync
    rsync -a -v [email protected]:'path/to/second.txt' /dest/folder/0007/
fi

Semoga saya bisa membantu.

Krondor
sumber