rsync-特定のファイルが存在しない場合にのみディレクトリの内容をコピーします


2

古いサーバーのコンテンツを新しいサーバーに移行したいのですが、すべてに対処するのではなく、.swfファイルが含まれるディレクトリを除外します。--excludeフラグは認識していますが、.swfファイルがある場合は、親ディレクトリ(およびそのコンテンツ)ではなく、ファイルのみを除外します

これをrsyncで実行できない場合、この条件でサーバー間でファイルをコピーするために使用できるbashスクリプトはありますか?

回答:


1

* .swfファイルを含むディレクトリのリストを生成し、そのリストをrsyncの除外ファイルに変換できます。

例えば

find /path/to/topdir/ -iname '*.swf' -printf "%h\n" |
    sort -u |
    sed -e 's/^/- /; s:$:/**:' > rsync-exclude.txt

出力は次のようになり、rsyncの--exclude-from=FILEオプションで使用できます。

- /path/to/topdir/directory1/**
- /path/to/topdir/directory2/**
- /path/to/topdir/directory3/**
- /path/to/topdir/directory5/subdir1/**

rsyncのincludeおよびexcludeオプションはマスターするのが難しい場合があり、グロブまたは正規表現のようにはまったく機能しないことに注意してください。パターンを正確に取得するまで--dry-run--verbose最初に練習したいと思うでしょう。


私は得ていsed: -e expression #1, char 16: unterminated `s' commandます。なぜアイデアがありますか?
アイベックス

私は何らかの形で:2番目のsed式の末尾を削除する必要があります。現在修正済み。
cas

ある場合の.swfファイルがサブディレクトリに、彼らは、出力ファイルにリストされます。ただし、--excludeフラグでテキストファイルを使用する場合、これはまったく問題ではありません。残念ながら、まだ投票するには十分な評判がありません。
アイベックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.