Rsync 複素数パターンマッチング

Rsync 複素数パターンマッチング

私は大規模な WordPress ウェブサイトの移行に取り組んでおり、元の画像のみを移行したいと考えています。WordPress が作成する画像をコピーしたくありません。rsync を使用する場合、ドキュメントには画像サイズのさまざまなバリエーションを考慮して除外する方法が見つかりません。私が思いついた最善の方法は、考えられるすべての画像サイズのシナリオに対してルールを作成することです。これが最善の方法でしょうか、それともこれを DRY する方法はありますか?

例:

rsync -avPzn -e ssh webhost:/site/www.domain.com/images . 
--exclude=**\-[0-9][0-9]x[0-9][0-9].jpg 
--exclude=**\-[0-9][0-9][0-9]x[0-9][0-9].jpg 
--exclude=**\-[0-9][0-9]x[0-9][0-9][0-9].jpg 
--exclude=**\-[0-9][0-9]x[0-9][0-9].png 
--exclude=**\-[0-9][0-9][0-9]x[0-9][0-9].png 
--exclude=**\-[0-9][0-9]x[0-9][0-9][0-9].png 
...

名前が付けられたイメージには、などのimage.jpg名前が付けられた複数のコピーが存在します。image-100x100.jpg

答え1

代わりに、コピーするファイルのリストを rsync にパイプし、別の手段を使用して不要なイメージ名を除外することもできます。これは、find正規表現の除外を使用するのと同じくらい簡単です。例:

ssh webhost find /site/www.domain.com/images \
  ! -regex '.*[0-9]+x[0-9]+\.\(png\|jpg\)' | \
rsync -avPzn --files-from=- webhost:/ .

正規表現には暗黙の^andがあり$、デフォルトでは emacs 構文が使用されることに注意してください。posix バージョンの方が適している場合があります。

-regextype posix-extended -regex '.*[0-9]+x[0-9]+\.(png|jpg)'

findコマンドにこれらのオプションがない場合は、sedまたは同様のものを使用してファイル名を除外できます。 find は完全なパス名を生成するため、rsync を/ベースとして使用する必要があります。

関連情報