rsync: 権限のないファイルをスキップしています。

rsync: 権限のないファイルをスキップしています。

rsync -rlptD他のユーザーのディレクトリをコピーするために使用します。コピー権限を持たない一部のファイル(事前に不明)があります。 rsyncにこれを無視させる方法はありますか?問題は、rsyncがゼロ以外の値を返すと、bash -xスクリプトが終了することです。

答え1

Rsyncにはこのオプションはありません。 2つの解決策があります。 1つは、rsyncエラーメッセージを解析することです。これは非常に強力ではありません。もう1つは、フィルタリングするための読み取れないファイルのリストを生成することです。

cd /source/directory
exclude_file=$(mktemp)
find . ! -readable -o -type d ! -executable |
  sed -e 's:^\./:/:' -e 's:[?*\\[]:\\1:g' >>"$exclude_file"
rsync -rlptD --exclude-from="$exclude_file" . /target/directory
rm "$exclude_file"

findない場合は、適切なディレクティブに置き換え-readableてください。-executable-perm

これは、名前に改行文字を含む読み取れないファイルがないと仮定します。これらの問題を処理する必要がある場合は、次のように区切られた空のファイルのリストを作成し、オプションを次のよう-0に渡す必要がありますrsync

find . \( ! -readable -o -type d ! -executable \) -print0 |
  perl -0000 -pe 's:\A\./:/:' -e 's:[?*\\[]:$1:g' >>"$exclude_file"

答え2

この特定の状況に対して簡単な解決策を作成しました。

rsync --args || $(case "$?" in 0|23) exit 0 ;; *) exit $?; esac)

戻りコードが0または23の場合は返し、0その他の場合は終了コードを返します。

ただし、次の点に注意することが重要です。Partial transfer due to error許可エラーだけでなく、すべてのエラーを無視します。、終了コードのすべての内容をキャプチャします23。 rsyncステータスコードの詳細については、次を参照してください。このリンク

関連情報