常用命令:
rclone copy /mnt/src remote_name:/mnt/dst -P --transfers 32 --checkers 64
过滤,包含和排除规则
Rclone有一套复杂的包含和排除规则。其中一些基于模式,一些基于文件大小等其他内容。
该过滤器被应用在copy,sync,move,ls,lsl, md5sum,sha1sum,size,delete和check操作。请注意,purge不适用于过滤器。
通过 rclone 的每个路径都与包含和排除规则匹配, 如
–include,–exclude,–include-from, –exclude-from,–filter,或–filter-from。尝试它们的最简单方法是使用 ls 命令, 或者–dry-run和v 一起运行。
模式
这个模式用于匹配基于 unix shell 使用的 “文件全局”的包含或排除文件。
如果模式以/开头,则它仅匹配目录树的顶层,相对于远程的根(不一定是本地驱动器的根)。如果它不是以/ 开头那么它从路径的末尾开始匹配,但它只匹配一个完整的路径元素:
file.jpg - matches "file.jpg"
- matches "directory/file.jpg"
- doesn't match "afile.jpg"
- doesn't match "directory/afile.jpg"
/file.jpg - matches "file.jpg" in the root directory of the remote
- doesn't match "afile.jpg"
- doesn't match "directory/file.jpg"
重要说明您必须使用/模式,\即使在Windows上运行也不行。
*匹配任何东西但不匹配/。
*.jpg - matches "file.jpg"
- matches "directory/file.jpg"
- doesn't match "file.jpg/something"
使用**匹配任何东西,包括斜杠(/)。
dir/** - matches "dir/file.jpg"
- matches "dir/dir1/dir2/file.jpg"
- doesn't match "directory/file.jpg"
- doesn't match "adir/file.jpg"
?匹配除斜杠之外的任何字符。
l?ss - matches "less"
- matches "lass"
- doesn't match "floss"
一个[和]共同组成一个单字节的类,如[a-z]或 [aeiou]或[[:alpha:]]。有关这些内容的更多信息,请参阅go regexp文档。
h[ae]llo - matches "hello"
- matches "hallo"
- doesn't match "hullo"
A {和}定义元素之间的选择。它应该包含一个以逗号分隔的模式列表, 其中任何一种模式都可能匹配。这些模式可以包含通配符。
{one,two}_potato - matches "one_potato"
- matches "two_potato"
- doesn't match "three_potato"
- doesn't match "_potato"
特殊字符可以在它们之前使用 \进行转义。
\*.jpg - matches "*.jpg"
\\.jpg - matches "\.jpg"
\[one\].jpg - matches "[one].jpg"
还要注意的是, rclone 筛选器全局只能在筛选器命令行标志中使用, 而不能在遥控器的规范中使用, 因此
rclone copy "remote:dir*.jpg" /path/to/dir
无法使用 – 所需要的是rclone --include "*.jpg" copy remote:dir /path/to/dir
目录
Rclone跟踪可以匹配任何文件模式的目录。
例如,如果添加包含规则
/a/*.jpg
Rclone将合成目录包含规则
/a/
如果你把任何规则以/结尾它只会匹配目录。
目录匹配仅用于优化目录访问模式 – 您仍必须匹配要匹配的文件。目录匹配不会优化基于存储桶的遥控器(例如s3,swift,google计算存储,b2)上没有目录概念的任何内容。
rsync和rclone模式之间的差异
Rclone实现了bash样式的{a,b,c}
全局匹配,rsync没有。
Rclone始终执行通配符匹配, 因此必须始终转义。
如何使用规则
Rclone维护包含规则和排除规则的组合列表。
每个文件都按顺序匹配, 从顶部开始, 与列表中的规则进行匹配, 直到找到匹配项。然后根据规则类型包括或排除该文件。
如果匹配器在对列表中的所有条目进行测试后未能找到匹配项, 则将包含路径。
例如,根据以下规则,+包括,-排除,
- secret*.jpg
+ *.jpg
+ *.png
+ file2.avi
- *
这将包括
file1.jpg
file3.png
file2.avi
这将排除
secret17.jpg
- 非.jpg和.png的
在递归到目录条目之前,对目录条目执行类似的过程。这仅适用于具有目录概念的远程(例如本地,谷歌驱动器,onedrive,亚马逊驱动器)而不是基于桶的远程(例如s3,swift,google compute storage,b2)。
添加过滤规则
使用以下命令行标志添加过滤规则。
重复选项
您可以重复以下选项以添加该类型的多个规则。
--include
--include-from
--exclude
--exclude-from
--filter
--filter-from
重要您不应该–include与–exclude一起使用。它可能会产生与您预期不同的结果。在这种情况下尝试使用:–filter*。
请注意,相同类型的所有选项将按上述顺序一起处理,无论它们在命令行上的放置顺序如何。
因此,所有–include选项首先按照它们在命令行中出现的顺序进行处理,然后是所有–include-from选项等。
要混合顺序使用包含和排除,–filter可以使用该标志。
–exclude – 排除匹配模式的文件
添加单个排除规则--exclude
该标志可以重复。请参阅上面的处理标志的顺序。
例如--exclude *.bak
,从同步中排除所有bak文件。
–exclude-from – 从文件中读取排除模式
从文件中添加排除规则。
该标志可以重复。请参阅上面的处理标志的顺序。
准备这样的文件 exclude-file.txt
# a sample exclude rule file
*.bak
file2.jpg
然后用作--exclude-from exclude-file.txt
。这将同步所有文件,除了那些以bak结束的和file2.jpg。
如果你有很多规则,这很有用。
–include – 包括匹配模式的文件
添加单个包含规则--include
该标志可以重复。请参阅上面的处理标志的顺序。
例如,–include *.{png,jpg}包括所有png与jpg的文件备份,并没有其他的。
这会–exclude *在过滤器列表的最后添加一个隐含的内容。这意味着你可以混合–include和–include-from与其他过滤器(如–exclude),但你必须包括所有您在包含语句所需的文件。如果这没有提供足够的灵活性,那么你必须使用–filter-from。
–include-from – 读取包含文件中的模式
从文件添加包含规则。
该标志可以重复。请参阅上面的处理标志的顺序。
准备这样的文件 include-file.txt
# a sample include rule file
*.jpg
*.png
file2.avi
然后用作–include-from include-file.txt。这将同步所有 jpg,png文件和file2.avi。
如果你有很多规则,这很有用。
这会–exclude *在过滤器列表的最后添加一个隐含的内容。这意味着你可以混合–include和–include-from与其他过滤器(如–exclude),但你必须包括所有您在包含语句所需的文件。如果这没有提供足够的灵活性,那么你必须使用–filter-from。
–filter – 添加文件过滤规则
这可用于添加单个包含或排除规则。包含规则+开头的以及-开头的排除规则。调用的特殊规则!可用于清除现有规则。
该标志可以重复。请参阅上面的处理标志的顺序。
例如–filter “- *.bak”,从同步中排除所有bak文件。
–filter-from – 从文件中读取过滤模式
从文件添加包含/排除规则。
该标志可以重复。请参阅上面的处理标志的顺序。
准备这样的文件 filter-file.txt
# a sample filter rule file
- secret*.jpg
+ *.jpg
+ *.png
+ file2.avi
- /dir/Trash/**
+ /dir/**
# exclude everything else
- *
然后用作–filter-from filter-file.txt。规则按照定义的顺序处理。
此示例将包括所有jpg和png文件,包含file2.avi的文件,排除任何匹配secret*.jpg。它还将包括dir同步根目录中的所有内容,除了dir/Trash它将被排除。其他所有内容都将从同步中排除。
–files-from – 阅读源文件名列表
这将从传入的文件中读取文件名列表,并仅 传输这些文件。该过滤规则将被忽略 ,如果你使用这个选项完全。
可以重复此选项以从多个文件中读取。这些按照它们放置在命令行上的顺序读取。
--files-from
文件中的路径将被解释为从命令中指定的根开始。前面的/字符被忽略。
例如,假设您有files-from.txt此内容:
# comment
file1.jpg
subdir/file2.jpg
然后你可以像这样使用它:
rclone copy --files-from files-from.txt /home/me/pics remote:pics
这将仅传输这些文件(如果存在)
/home/me/pics/file1.jpg → remote:pics/file1.jpg
/home/me/pics/subdir/file2.jpg → remote:pics/subdirfile1.jpg
举一个更复杂的例子,假设你有几个文件要用这些绝对路径定期备份:
/home/user1/important
/home/user1/dir/file
/home/user2/stuff
要复制这些,你会发现一个共同的子目录 – 在这种情况下/home ,将其余文件放入files-from.txt或不带前面的/,例如
user1/important
user1/dir/file
user2/stuff
然后,您可以将这些复制到这样的远程
rclone copy --files-from files-from.txt /home remote:backup
3个文件将以如下所示remote:backup的路径 到达files-from.txt:
/home/user1/important → remote:backup/user1/important
/home/user1/dir/file → remote:backup/user1/dir/file
/home/user2/stuff → remote:backup/stuff
您当然可以选择/作为根,在这种情况下您 files-from.txt可能会看起来像这样。
/home/user1/important
/home/user1/dir/file
/home/user2/stuff
你会像这样转移它
rclone copy --files-from files-from.txt / remote:backup
在这种情况下home在远程上会有一个额外的目录:
/home/user1/important → remote:home/backup/user1/important
/home/user1/dir/file → remote:home/backup/user1/dir/file
/home/user2/stuff → remote:home/backup/stuff
–min-size – 不要传输任何小于此的文件
此选项控制将传输的最小大小文件。这将默认为kBytes但后缀k,M或G可以使用。
例如,--min-size 50k
意味着不会传输小于50kByte的文件。
–max-size – 不要传输任何大于此的文件
此选项控制将传输的最大文件大小。这将默认为kBytes但后缀k,M或G可以使用。
例如,--max-size 1G
意味着不会传输大于1GByte的文件。
–max-age – 不要传输任何早于此的文件
此选项控制要传输的文件的最长期限。在几秒钟内或后缀为:
-
ms
– 毫秒 -
s
– 秒 -
m
– 分钟 -
h
– 小时 -
d
– 天 -
w
– 周 -
M
– 几个月 -
y
– 年
例如,--max-age 2d
意味着不会传输超过2天的文件。
–min-age – 不要转移任何比这更年轻的文件
此选项控制要传输的文件的最小年龄。用秒或后缀给出(参见–max-age后缀列表)
例如,--min-age 2d
意味着不会转移不到2天的文件。
–delete-excluded – 删除从同步中排除的目标文件
重要的是这个标志是危险的 – 使用–dry-run和-v来尝试一下先。
执行rclone sync
此操作时,将删除目标上同步中排除的所有文件。
例如,如果你从没有同步A到B无–min-size 50k标志
rclone sync A: B:
然后你用这个重复它 --delete-excluded
rclone --min-size 50k --delete-excluded sync A: B:
这将删除所有B小于50 kBytes的文件,因为这些文件现在已从同步中排除。
在使用此标志之前始终先用–dry-run和-v测试。
–dump filters – 将过滤器转储到输出
这会将定义的过滤器作为正则表达式转储到输出。
用于调试。
引用shell元字符
上面的示例可能无法在shell中逐字处理,因为它们中包含shell元字符(例如*),并且可能需要引用。
例如linux,OSX
--include \*.jpg
--include '*.jpg'
--include='*.jpg'
在Windows中,扩展是由命令而不是shell完成的,所以这应该可以正常工作
--include *.jpg
根据文件排除目录
可以基于该目录中存在的文件排除目录。应使用--exclude-if-present
标志指定文件名 。该标志优先于其他过滤标志。
想象一下,您有以下目录结构:
dir1/file1
dir1/dir2/file2
dir1/dir2/dir3/file3
dir1/dir2/dir3/.ignore
您可以通过运行以下命令从同步中排除dir3:
rclone sync --exclude-if-present .ignore dir1 remote:backup
目前只支持一个文件名,即–exclude-if-present 不应多次使用。
网友评论