我知道如何使用该cp
命令递归地(-r
)复制嵌套文件夹,同时保留(-p
)文件元数据,例如修改时间:
cp -pr "/path/from" "path/to"
有没有办法按名称省略嵌套在第一级深处的一个特定文件夹?
例如,Photos
正在复制一个名为的文件夹。我想跳过Dogs
嵌套在其中的文件夹。我想要所有东西,但不想要/Photos/Dogs
文件夹或其内容。
我想我可以让它复制,然后删除。但这是低效的。有没有办法首先避免文件夹复制。
我目前在 macOS Mojave 上工作,后来在 FreeBSD 12 上工作。
是的,您可以相当轻松地制作文件结构的副本,同时避免复制一个或多个子目录,但您不会使用
cp
.使用
rsync
,您可以使用排除模式排除文件和/或目录。在您的情况下,您似乎想要使用这将制作
path/to
一个精确的副本,/path/from
同时避免Dogs
在任何路径匹配处调用任何目录Photos/Dogs
。如果您删除/
源目录的尾随,您将获得path/to/from
源文件夹的精确副本。使用的排除模式将
rsync
忽略Dogs
位于名为的目录中的任何子目录Photos
,例如/path/from/Photos/Dogs
和/path/from/holidays/2013/Photos/Dogs
。Using--exclude=Dogs/
将排除任何调用的子目录,Dogs
而不管它的父目录是什么,而 using--exclude=Dogs
将排除任何被调用的(无论文件类型如何)Dogs
。要仅匹配直接在 下的Photos/Dogs
目录,请使用./path/from
--exclude='/Photos/Dogs/'
请参阅系统手册中名为“包含/排除模式规则”的部分
rsync
。(
-a
)--archive
选项将确保时间戳、权限等也被复制,并启用递归复制。(-v
)--verbose
选项启用详细操作。如果您想保留名称之间的硬链接,请添加
-H
( )(再次参见手册)。--hard-links
rsync