我知道如何使用该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
任何名为 的子目录,例如和。使用将排除任何被调用的子目录,无论其父目录被称为什么,并且使用将排除被称为 的任何内容(无论文件类型)。仅匹配目录Dogs
Photos
/path/from/Photos/Dogs
/path/from/holidays/2013/Photos/Dogs
--exclude=Dogs/
Dogs
--exclude=Dogs
Dogs
Photos/Dogs
直接地下/path/from
,使用--exclude='/Photos/Dogs/'
。
rsync
请参阅系统手册中名为“包含/排除模式规则”的部分。
-a
( )选项--archive
将确保时间戳、权限等也被复制,并且还启用递归复制。-v
( )选项--verbose
启用详细操作。
如果您想保留名称之间的硬链接,请添加-H
( )(再次参见手册)。--hard-links
rsync