CentOS7下如何复制全部隐藏文件/目录且无需确认直接覆盖目标文件
问题核心原因
- CentOS 7系统默认配置了
cp命令的别名:alias cp='cp -i',-i参数会强制开启交互覆盖确认,优先级高于-f参数,因此你加-f也无法跳过确认;且cp本身不支持A全量确认的快捷键,所以输入A无效。 - 你使用的
.*通配符会匹配到.(当前目录)和..(上级目录)两个特殊目录,会导致误复制上级目录的内容,存在风险。
可行解决方法
方案1:直接调用原生cp命令(无需额外工具)
执行命令:
\cp -rf /home/old/{*,.[!.]*} /home/new
说明:
- 命令开头的
\会绕过系统设置的cp别名,直接调用原生二进制文件,不会触发-i的交互提示 -r参数递归复制所有子目录和文件,-f参数强制覆盖目标路径已存在的文件{*,.[!.]*}通配符会同时匹配所有非隐藏文件、以及所有不以..开头的隐藏文件,避免误匹配上级目录
方案2:使用rsync命令(更稳妥,推荐)
CentOS 7默认预装rsync,执行命令:
rsync -av /home/old/ /home/new/
说明:
-a为归档模式,会自动保留文件权限、所属用户组、修改时间、软链接等属性,递归复制所有内容(自动包含隐藏文件)-v会输出复制进度,方便查看执行状态- 注意路径末尾的斜杠不能省略:
/home/old/代表复制old目录内的所有内容,不会把old目录本身复制到new目录下
方案3:临时取消cp别名后执行复制
如果后续需要保留cp的交互提示别名,可以先临时取消别名再执行复制:
# 临时取消cp的交互别名 unalias cp # 执行复制 cp -rf /home/old/{*,.[!.]*} /home/new # 可选:执行完后恢复默认别名 alias cp='cp -i'
内容的提问来源于stack exchange,提问作者abhimanyue
相关产品推荐
相关产品推荐

