是否有“cp -a”命令的变体可以避免从其他文件系统进行复制?

是否有“cp -a”命令的变体可以避免从其他文件系统进行复制?

假设我有一个/data/something包含以下子目录的目录:

/data/something/iowa
/data/something/wyoming
/data/something/burkinafaso
/data/something/slovenia

所有四个子目录都有内容。burkinafasoslovenia是挂载点;iowawyoming没有。我想以这样的方式复制目录结构,即iowawyoming与其所有子树一起递归复制,但burkinafasoslovenia被复制为空。与和cp不同,似乎没有这样的开关。做我想做的事的最好方法是什么?du -xfind -xdev

答案1

在装有 GNU Coreutils(大多数 Linux 发行版)的机器上,该cp命令具有-x.

来自 cp 手册页:

-x, --one-file-system

答案2

rsync

-x, --one-file-system       don't cross filesystem boundaries

-x, --一个文件系统

这告诉 rsync 在递归时避免跨越文件系统边界。这并不限制用户指定从多个文件系统复制的项目的能力,只是 rsync 在用户指定的每个目录的层次结构中进行递归,以及删除期间接收端的类似递归。另请记住,rsync 将同一设备的“绑定”挂载视为位于同一文件系统上。

如果重复此选项,rsync 会忽略副本中的所有安装点目录。否则,它会在遇到的每个安装点处包含一个空目录(使用已安装目录的属性,因为底层安装点目录的属性不可访问)。

如果 rsync 被告知折叠符号链接(通过 --copy-links 或 --copy-unsafe-links),则另一个设备上目录的符号链接将被视为挂载点。到非目录的符号链接不受此选项的影响。

(来源:man rsync)

并且源和目标都允许是本地的。据我所知,rsyncs--archive选项似乎与 s 匹配,保留了您有权保留的几乎所有内容。cp

相关内容