
Ich arbeite an der Migration einer großen WordPress-Website und möchte nur Originalbilder migrieren. Ich möchte die von WordPress erstellten Bilder nicht kopieren. Bei Verwendung von rsync sehe ich in den Dokumenten keine Möglichkeit, die verschiedenen Bildgrößenvariationen zu berücksichtigen und auszuschließen. Das Beste, was mir eingefallen ist, ist, eine Regel für jedes mögliche Bildgrößenszenario zu erstellen. Ist das das Beste, was ich erreichen werde, oder gibt es eine Möglichkeit, dies zu TROCKNEN?
Als Beispiel:
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
...
Von einem Bild mit diesem Namen image.jpg
gibt es mehrere Kopien mit diesem Namen image-100x100.jpg
usw.
Antwort1
Sie können stattdessen die Liste der zu kopierenden Dateien in rsync weiterleiten und die unerwünschten Bildnamen auf andere Weise ausschließen. Dies kann ganz einfach durch die Verwendung find
eines regulären Ausdrucks erfolgen, z. B.:
ssh webhost find /site/www.domain.com/images \
! -regex '.*[0-9]+x[0-9]+\.\(png\|jpg\)' | \
rsync -avPzn --files-from=- webhost:/ .
Beachten Sie, dass der reguläre Ausdruck ein implizites „und“ hat ^
und $
standardmäßig die Emacs-Syntax verwendet. Möglicherweise bevorzugen Sie eine POSIX-Version:
-regextype posix-extended -regex '.*[0-9]+x[0-9]+\.(png|jpg)'
Wenn Ihr find
Befehl diese Optionen nicht hat, können Sie sed
oder ähnliches verwenden, um die Dateinamen herauszufiltern. Da die Suche vollständige Pfadnamen erzeugt, müssen Sie rsync /
als Basis verwenden.