如何通过排除超过 100MB 的文件但包含与已知文件扩展名模式匹配的超过 100MB 的文件来传输数据?

如何通过排除超过 100MB 的文件但包含与已知文件扩展名模式匹配的超过 100MB 的文件来传输数据?

如何通过排除超过 100MB 的文件但包含与已知文件扩展名模式匹配的超过 100MB 的文件来传输数据?

我已经阅读了 rsync 选项,但我认为我无法使用 rsync 来实现这一点,因为即使与or--max-size=结合使用也不够灵活。--include--exclude

答案1

分两步(为简单起见,尽管这些步骤绝对可以组合)。

首先传输“小”文件:

find /source/path -type f -size -100M -print0 |
rsync -av -0 --files-from=- / user@server:/destination/

然后传输文件名匹配的“大”文件pattern

find /source/path -type f -size +99M -name 'pattern' -print0 |
rsync -av -0 --files-from=- / user@server:/destination/

然而,这是未经测试的。

-print0在 GNU find(和其他)中将使用分隔符打印找到的名称nul,并且-0withrsync将以--files-from-特定方式解释此标准输入流。

读取的文件路径--files-from应该相对于指定的源,这就是我使用/in 作为源的原因rsync(我假设/source/pathinfind是绝对路径)。


组合变化(也未测试):

find /source/path -type f \
    \( -size -100M -o -name 'pattern' \) -print0 |
rsync -av -0 --files-from=- / user@server:/destination/

pattern对于“大”文件有多个允许的字符串:

find /source/path -type f \
    \( -size -100M -o -name 'pattern1' -o -name 'pattern2' -o -name 'pattern3' \) -print0 |
rsync -av -0 --files-from=- / user@server:/destination/

每个文件扩展名pattern可能类似于*.mp4您使用的任何文件扩展名。请注意,这些需要被引用,如 中所示-name '*.mp4'

相关内容