linux - rsync 使用包含选项仅复制某些类型的文件

我使用以下 bash 脚本仅复制具有特定扩展名的文件(在本例中为 *.sh),但它仍会复制所有文件。怎么了?

from=$1
to=$2

rsync -zarv  --include="*.sh" $from $to

最佳答案

我认为 --include用于包含被 --exclude 排除的文件子集,而不是只包括那些文件。 换句话说:您必须考虑 include 的含义不排除

试试吧:

rsync -zarv  --include "*/" --exclude="*" --include="*.sh" "$from" "$to"

对于rsync 3.0.6或更高版本,需要修改顺序如下(见注释):

rsync -zarv --include="*/" --include="*.sh" --exclude="*" "$from" "$to"

添加 -m flag 将避免在目标中创建空目录结构。在 3.1.2 版本中测试。

所以如果我们只想要 *.sh 文件,我们必须排除所有文件 --exclude="*" , 包括所有目录 --include="*/"并包含所有 *.sh 文件 --include="*.sh" .

您可以在man page 的包含/排除模式规则部分找到一些很好的示例。

https://stackoverflow.com/questions/11111562/

相关文章:

linux - 如何在网络上的 2 个文件夹中获取所有文件之间的差异?

linux - 目录上次修改日期

python - 如何在 Python 中使用省略号切片语法?

linux - 异步 shell 命令

python - 运行 `pip install` 的 Ubuntu 给出错误 'The follo

python - 我传入的 Django 请求中的 JSON 数据在哪里?

linux - 无法连接到位于 unix :/var/run/docker. sock 的 Dock

python - 我可以为 requests.request 设置 max_retries 吗?

python - 在 virtualenv 中设置环境变量

linux - fork: retry: 资源暂时不可用