在 Linux 中,cp 命令本身并不直接支持递归复制整个目录(即包含子目录和文件)。要实现递归复制,通常使用 cp 命令的 -r(或 --recursive)选项。以下是具体的用法和一些示例:
cp -r 源目录 目标目录
-r:递归复制,包括所有子目录和文件。源目录:要复制的目录路径。目标目录:目标位置,可以是另一个目录,也可以是单个文件名。复制整个目录及其内容
假设你有一个名为 source_dir 的目录,想要将其完整复制到 destination_dir:
cp -r source_dir destination_dir
如果 destination_dir 不存在,cp 会创建它。如果已经存在,destination_dir 及其内容将被覆盖。
保留文件属性
使用 -p 选项可以保留文件的权限、时间戳等属性:
cp -rp source_dir destination_dir
避免覆盖已有文件
使用 -n 选项可以在目标文件已存在时跳过复制,防止覆盖:
cp -rn source_dir destination_dir
交互式复制
使用 -i 选项可以在覆盖文件前进行提示:
cp -ri source_dir destination_dir
仅复制特定类型的文件
结合 find 命令,可以实现更复杂的递归复制。例如,仅复制 .txt 文件:
find source_dir -type f -name "*.txt" -exec cp {} destination_dir \;
使用 rsync 进行更高效的复制
虽然 cp 已经足够用于大多数递归复制需求,但 rsync 提供了更多的功能和更高的效率,特别是在处理大量文件或需要增量备份时:
rsync -av --progress source_dir/ destination_dir/
-a:归档模式,递归复制并保留符号链接、权限、时间戳等。-v:详细模式,显示复制过程中的信息。--progress:显示复制进度。cp 命令时,目标目录中已有的文件会被覆盖,请谨慎操作。通过以上方法,你可以灵活地在 Linux 系统中实现目录的递归复制。如果有更复杂的需求,可以结合使用其他命令如 find 或 rsync 来完成。