Rsync-Mustervergleich für komplexe Zahlen

Rsync-Mustervergleich für komplexe Zahlen

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.jpggibt es mehrere Kopien mit diesem Namen image-100x100.jpgusw.

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 findeines 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 findBefehl diese Optionen nicht hat, können Sie sedoder ähnliches verwenden, um die Dateinamen herauszufiltern. Da die Suche vollständige Pfadnamen erzeugt, müssen Sie rsync /als Basis verwenden.

verwandte Informationen