![rsync 包含/排除名称中带有连续数字的文件](https://linux22.com/image/130738/rsync%20%E5%8C%85%E5%90%AB%2F%E6%8E%92%E9%99%A4%E5%90%8D%E7%A7%B0%E4%B8%AD%E5%B8%A6%E6%9C%89%E8%BF%9E%E7%BB%AD%E6%95%B0%E5%AD%97%E7%9A%84%E6%96%87%E4%BB%B6.png)
我在src
rsync
服务器中有这样的文件:
p4.1
p4.2
p4.3
依此类推直至p4.67
。
现在我需要下载其中一些。不是全部,而是从一些起始的开始,即我希望从p4.42
到下载p4.67
并避免下载第一个。这将通过 bash 脚本完成,该脚本会发现当前dst
文件编号并为rsync
.我现在看到的唯一解决方案是使用的蹩脚解决方案--include-from=FILE
,但这意味着我需要FILE
通过 bash 脚本生成并将其从驱动器中删除。希望知道是否有更有效和优雅的解决方案使用rsync PATTERN
.
答案1
seq
组合(生成具有所选格式的范围-f
)和--include-from=-
(读取)的可能解决方案stdin
:
$ ls src/
p.4.31 p.4.32 p.4.42 p.4.45 p.4.46 p.4.54
$ ls dst
$ seq -f "p.4."%g 42 46 | rsync src/* dst/ --include-from=- --exclude=* -v
p.4.42
p.4.45
p.4.46
sent 183 bytes received 86 bytes 538.00 bytes/sec
total size is 0 speedup is 0.00
$ ls dst/
p.4.42 p.4.45 p.4.46
答案2
另一种处理方法就是使用NUL 分隔 printf
如下:
rsync -0 --include-from=<(printf 'p4.%d\0' {42..67}) .