在Linux中,cp
命令默认会递归复制目录及其内容。若想"略过目录"(即不复制目录本身及其内容),有以下几种方法:
-r
/--recursive
的相反操作cp
命令没有直接跳过目录的参数,但可以通过组合其他命令实现:
# 复制当前目录下的所有文件(非目录),不包括子目录
cp * 目标路径/
注意:这会跳过隐藏文件(以.
开头的文件),若需包含隐藏文件(仍排除目录):
shopt -s dotglob # 让*匹配隐藏文件
cp * 目标路径/
shopt -u dotglob # 恢复默认
find
命令精确控制仅复制文件(排除目录):
find 源路径 -type f -exec cp {} 目标路径/ \;
-type f
:仅匹配文件(排除目录)。-exec
:对找到的每个文件执行cp
。rsync
工具rsync
提供更灵活的排除选项:
rsync -av --exclude='*/' 源路径/ 目标路径/
--exclude='*/'
:跳过所有目录。-a
:归档模式(保留属性)。/
表示复制目录内容而非目录本身。若想复制目录但排除特定子目录:
cp -r --exclude='目录名' 源路径 目标路径
或使用rsync
:
rsync -av --exclude='目录名' 源路径/ 目标路径/
方法 | 行为 | 适用场景 |
---|---|---|
cp * |
简单但忽略隐藏文件和目录 | 快速复制可见非目录文件 |
find + cp |
精确复制所有文件(含隐藏文件) | 需要严格排除目录时 |
rsync |
灵活排除,支持复杂模式 | 需要高级控制或远程复制时 |
根据需求选择合适的方法即可。