返回

rsync 命令如何只复制特定类型文件?

Linux

使用 rsync 命令有选择地复制特定类型文件

问题:rsync 命令仅复制特定扩展名文件时仍复制所有文件

如果你遇到这样的问题,不要惊慌。这是因为你在使用 rsync 命令时,使用了 -a 选项,它是一个归档选项,会复制所有文件,包括目录和符号链接。要仅复制特定扩展名的文件,你需要删除 -a 选项。

解决方法:

要仅复制特定扩展名的文件,可以使用 --include 选项。此选项可让你指定包含在复制过程中的文件模式。例如,要仅复制 .sh 扩展名的文件,可以使用以下命令:

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

完整示例:

以下是一个完整的示例,演示如何使用 --include 选项仅复制 .sh 扩展名的文件:

from=/path/to/source
to=/path/to/destination

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

其他提示:

除了 --include 选项,你还可以使用 --exclude 选项来排除某些类型的文件。例如,要排除 .bak 扩展名的文件,可以使用以下命令:

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

你还可以使用正则表达式来匹配更复杂的文件模式。例如,要匹配所有以数字结尾的文件,可以使用以下命令:

rsync -zarv --include="*.sh" --include="/\d+$/" $from $to

常见问题解答:

  1. 为什么我的 rsync 命令没有按预期工作?
    可能是因为你使用了错误的选项或语法。仔细检查你的命令并确保所有选项都正确无误。

  2. 如何使用 rsync 复制子目录?
    使用 -r 选项可以递归复制目录。例如:

    rsync -zarv -r /path/to/source/subdir /path/to/destination/subdir
    
  3. 如何使用 rsync 保留文件权限?
    使用 -p 选项可以保留文件权限。例如:

    rsync -zarv -p /path/to/source /path/to/destination
    
  4. 如何使用 rsync 跳过已存在的文件?
    使用 --skip-existing 选项可以跳过已存在的文件。例如:

    rsync -zarv --skip-existing /path/to/source /path/to/destination
    
  5. 如何使用 rsync 同步两个目录?
    使用 -u 选项可以更新目标目录中的较旧文件。例如:

    rsync -zarv -u /path/to/source /path/to/destination
    

总结:

rsync 是一个强大的命令行工具,可用于复制和同步文件和目录。通过使用 --include--exclude 选项,你可以控制复制过程并仅复制所需的特定类型的文件。请记住删除 -a 选项,否则它将复制所有文件。使用这些技巧,你可以有效地管理文件传输并确保仅复制所需内容。