Rsync 复数模式匹配

Rsync 复数模式匹配

我正在迁移一个大型 WordPress 网站,只想迁移原始图像。我不想复制 WordPress 创建的图像。使用 rsync,我没有在文档中看到一种方法来解释图像大小的多种变化并排除它们。我想到的最好的办法是为每种可能的图像大小场景创建一个规则。这是我能得到的最好的结果吗?还是有办法解决这个问题?

举个例子:

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/作为基础。

相关内容