因此,我目前正在编写自己的简单备份客户端(显然基于rsync),经过大量的试验和错误,我(希望)只剩下一个问题。

源文件夹结构

.
├── .hidden_file.txt
├── .hidden_folder
│   └── .keep
├── regular_file.txt
└── regular_folder
    └── .keep

备份命令

如您所见,我试图“简单地”排除与regular* 相匹配的传送,但明确在.keep文件夹中包括了regular_folder文件。
至少是这个主意。
rsync --archive --relative --prune-empty-dirs <many other options> \
      --include='/data/source/regular_folder/.keep' \
      --exclude='regular*' \
      /data/source /data/target/<timestamp>

我想要的是
.
├── .hidden_file.txt
└── .hidden_folder
    └── .keep
└── regular_folder
    └── .keep

我实际上得到了什么
.
├── .hidden_file.txt
└── .hidden_folder
    └── .keep

很明显,我做了很多类似的工作,例如阅读手册,但要么明显的事情一定使我溜走了,要么...我不知道。

我了解在我的情况下,我必须另外添加--include='/data/source/regular_folder/(我想要的文件的父目录),但是如果.keep旁边还有其他文件,则,这些文件也会自动包括在内,而我不需要

感谢您的帮助,我真的很感激:)

更新资料

编辑
忽略所有。对于我的新测试用例,它不再起作用了(这很有意义,因为排除项应始终在源代码之前。不知道为什么它适用于我的初始测试)。回到绘图板 :/

原始
在按照建议进行了单元测试之后(可悲的是,它并没有达到我想要的方式),我想到了其他东西。

无需通过--include添加我明确想要的文件/文件夹,我可以将它们作为rsync的其他源添加。
新命令如下所示:
rsync --archive --relative --prune-empty-dirs <many other options> \
      --exclude='regular*' \
      /data/source /data/source/regular_folder/.keep' \
      /data/target/<timestamp>

这很好用,但是...

...你猜对了,还有另一个问题。当通配符必须下降到目录中时,Source并不能真正使用它们。
假设我要保留所有.keep文件,我想:
rsync --archive --relative --prune-empty-dirs <many other options> \
      --exclude='regular*' \
      /data/source /data/source/*/.keep' \
      /data/target/<timestamp>

多个*也不起作用。

现在的问题。我只是愚蠢地想让它正常工作还是那不可能?

我知道源代码在平面层次结构中使用通配符。
例如,以下将作为源:
/some/path/*.txt

最佳答案

尝试这个:

--include='/data/source/regular_folder/.keep'
--exclude='regular*/**'

基本上,这排除了regular_folder内部的所有文件,但不包括文件夹本身。

但是,它确实排除了子目录,因此更深层次的.keep文件将无法工作。如果您有这样的话,那么这样的事情应该起作用:
--include='/data/source/regular_folder/.keep'
--include='/data/source/regular_folder/deeper/deeper/.keep'
--include='*/'
--exclude='regular*/**'

或者,仅包含所有.keep文件:
--include='.keep'
--include='*/'
--exclude='regular*/**'
'*/'的意思是“包括所有目录”,但是没有说明文件。

关于linux - rsync : include file from excluded directory,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38977031/

10-16 23:41