
私は大規模な 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 を/
ベースとして使用する必要があります。