如何通过排除超过 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
,并且-0
withrsync
将以--files-from-
特定方式解释此标准输入流。
读取的文件路径--files-from
应该相对于指定的源,这就是我使用/
in 作为源的原因rsync
(我假设/source/path
infind
是绝对路径)。
组合变化(也未测试):
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'
。