Linux递归复制文件时跳过不存在/损坏文件/目录方法咨询
故障VM文件恢复:跳过错误的文件复制方案
单条命令方案(推荐用rsync)
直接用rsync是最省心的选择,它天生适配这种需要跳过错误、保留目录结构的场景:
rsync -av --ignore-errors --exclude="lost+found" /path/to/source /path/to/target
参数说明:
-a:归档模式,自动保留文件权限、目录结构、时间戳等元数据-v:显示复制进度和细节,方便跟踪恢复状态--ignore-errors:遇到无法访问、损坏的文件/目录时自动跳过,继续处理其他文件--exclude="lost+found":可选,排除系统自动生成的lost+found目录(无需恢复时可加)
如果一定要用cp,可以把错误输出重定向到空设备,同时开启递归复制:
cp -R /path/to/source/* /path/to/target 2>/dev/null
注意:cp遇到某些严重错误时可能终止整个复制流程,稳定性不如rsync。
自定义bash脚本(适合需要错误日志的场景)
如果需要记录哪些文件/目录无法访问,方便后续排查,可使用以下简单脚本:
#!/bin/bash SOURCE="/path/to/source" TARGET="/path/to/target" ERROR_LOG="copy_errors.log" mkdir -p "$TARGET" # 先创建对应目录结构 find "$SOURCE" -type d -exec mkdir -p "$TARGET/{}" \; 2>> "$ERROR_LOG" # 逐个复制文件,错误写入日志 find "$SOURCE" -type f -exec cp {} "$TARGET/{}" 2>> "$ERROR_LOG" \;
这个脚本会跳过损坏文件,同时把所有错误信息记录到copy_errors.log中,不会中断整个恢复流程。
内容的提问来源于stack exchange,提问作者T_H
相关产品推荐
相关产品推荐

