![如何通过排除超过 100MB 的文件但包含与已知文件扩展名模式匹配的超过 100MB 的文件来传输数据?](https://linux22.com/image/127291/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E6%8E%92%E9%99%A4%E8%B6%85%E8%BF%87%20100MB%20%E7%9A%84%E6%96%87%E4%BB%B6%E4%BD%86%E5%8C%85%E5%90%AB%E4%B8%8E%E5%B7%B2%E7%9F%A5%E6%96%87%E4%BB%B6%E6%89%A9%E5%B1%95%E5%90%8D%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%E7%9A%84%E8%B6%85%E8%BF%87%20100MB%20%E7%9A%84%E6%96%87%E4%BB%B6%E6%9D%A5%E4%BC%A0%E8%BE%93%E6%95%B0%E6%8D%AE%EF%BC%9F.png)
如何通过排除超过 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'
。