复制文件夹时省略一个特定的嵌套文件夹

复制文件夹时省略一个特定的嵌套文件夹

我知道如何使用该cp命令递归地 ( -r) 复制嵌套文件夹,同时保留 ( -p) 文件元数据,例如修改时间:

cp -pr "/path/from" "path/to"

有没有办法按名称省略嵌套在第一层深度的特定文件夹?

例如,Photos正在复制名为的文件夹。我想跳过Dogs嵌套的文件夹。我想要一切,但不想要/Photos/Dogs文件夹及其内容。

我想我可以让它复制,然后删除。但这是低效的。有没有办法从一开始就避免文件夹复制。

我目前正在使用 macOS Mojave,随后将使用 FreeBSD 12。

答案1

是的,您可以相当轻松地复制文件结构,同时避免复制一个或多个子目录,但您不会使用cp.

通过rsync,您可以使用排除模式排除文件和/或目录。就您而言,您似乎想要使用

rsync -av --exclude='Photos/Dogs/' /path/from/ path/to

这将制作path/to的精确副本,/path/from同时避免Dogs在任何路径匹配处调用任何目录Photos/Dogs。如果删除/源目录上的尾随,您将获得path/to/from源文件夹的精确副本。

使用的排除模式将忽略位于名为 的目录中的rsync任何名为 的子目录,例如和。使用将排除任何被调用的子目录,无论其父目录被称为什么,并且使用将排除被称为 的任何内容(无论文件类型)。仅匹配目录DogsPhotos/path/from/Photos/Dogs/path/from/holidays/2013/Photos/Dogs--exclude=Dogs/Dogs--exclude=DogsDogsPhotos/Dogs直接地/path/from,使用--exclude='/Photos/Dogs/'

rsync请参阅系统手册中名为“包含/排除模式规则”的部分。

-a( )选项--archive将确保时间戳、权限等也被复制,并且还启用递归复制。-v( )选项--verbose启用详细操作。

如果您想保留名称之间的硬链接,请添加-H( )(再次参见手册)。--hard-linksrsync

相关内容