これはCatalinaを実行しているMacのbashです。
これは働きます:
rsync -Pa --rsh="ssh -p 19991" --exclude '*.jpg' --exclude '*.mp4' pi@localhost:/home/pi/webcam /Volumes/Media/Webcam\ Backups/raspcondo/webcam/
これらは以下ではありません:
rsync -Pa --rsh="ssh -p 19991" --exclude={'*.jpg', '*.mp4'} pi@localhost:/home/pi/webcam /Volumes/Media/Webcam\ Backups/raspcondo/webcam/
rsync -Pa --rsh="ssh -p 19991" --exclude {'*.jpg', '*.mp4'} pi@localhost:/home/pi/webcam /Volumes/Media/Webcam\ Backups/raspcondo/webcam/
出力は次のとおりです。
building file list ...
rsync: link_stat "/Users/mnewman/*.mp4}" failed: No such file or directory (2)
rsync: link_stat "/Users/mnewman/pi@localhost:/home/pi/webcam" failed: No such file or directory (2)
0 files to consider
sent 29 bytes received 20 bytes 98.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at /AppleInternal/BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-54.120.1/rsync/main.c(996) [sender=2.6.9]
除外するファイルの種類のリストに問題がありますか?
ベストアンサー1
まず、最初の例は機能します。使用に問題がありますか?
本当にこれをしたくない場合は試してみてください。--exclude=*.{jpg,mp4}
一部のシェルでは拡張されますが、--exclude=*.jpg --exclude=*.mp4
次の点に注意してください。
これは住宅の特徴と言うサポート拡張。これはいいえrsync または rsync フィルタルールの機能です。
rsyncが中括弧自体を使用すると誤って考えると、これは簡単に混乱し、「驚くべき」動作につながる可能性があります(中括弧を使用したり、することも、まったく見ることはできません)。
延長完了今後rsync が実行されます。 rsync は、たとえば次のようにのみ表示できます。
--exclude=*.mp4
なぜなら現在、ディレクトリにはこのパターンと一致するファイル名はありません。--exclude=*.mp4
ファイル名が一致するか、中--exclude=*.jpg
括弧拡張はワイルドカードなしで正確なファイル名に拡張されます。
例えば
$ mkdir /tmp/test
$ cd /tmp/test
$ echo rsync --exclude=*.{jpg,mp4}
rsync --exclude=*.jpg --exclude=*.mp4
これまでは大丈夫です...しかし、ファイル名が実際に中かっこ拡張と一致する場合、何が起こるのか見てください。
$ touch -- --exclude=foo.jpg
$ touch -- --exclude=bar.mp4
$ touch -- --exclude=foobar.mp4
$ echo rsync --exclude=*.{jpg,mp4}
rsync --exclude=foo.jpg --exclude=bar.mp4 --exclude=foobar.mp4
多くの--exclude
オプションを入力しないより良い方法は、配列とprintfを使用することです。
excludes=('*.mp4' '*.jpg')
rsync ...args... $([ "${#excludes[@]}" -gt 0 ] && printf -- "--exclude='%s' " "${excludes[@]}") ...more args...
これにより、次のコマンドラインが生成されます。
rsync ...args... --exclude='*.mp4' --exclude='*.jpg' ...more args...
たとえば、配列とプロセスの置き換えを使用する方が良いです--exclude-from
。
rsync ... --exclude-from=<([ "${#excludes[@]}" -gt 0 ] && printf -- '- %s\n' "${excludes[@]}") ...