如何复制目录并忽略错误

如何复制目录并忽略错误

我在 Android 设备上打开了 root Linux shell,在使用cp它复制目录时出现错误。我想我知道错误来自哪里,所以这不是我的问题。

我想找到一个命令,它允许我复制该目录中的所有内容,而不是在遇到错误时退出。这是现在发生的情况的示例:

root@flo:/ # cp -r -v /d/* /sdcard/test/
cp '/d/TRRS'
cp: xread: Invalid argument
1|root@flo:/ #

我该怎么办?

答案1

我遇到了类似的问题,我需要将文件从一个目录复制到另一个目录,然后出现错误时继续。这个想法是在一个人的帮助下尽可能多地复制操作系统(就我而言德班) 工具,然后手动处理可能的错误。

我用的是暗示 朱莉·佩尔蒂埃她提供的评论使用rsync。我也用过这个答案作为模板,因为我希望能够分析失败的复制操作。

总之,您的案例的解决方案可能是

rsync --archive --itemize-changes --delete /d/ /sdcard/test/

说明:rsync将源路径 ( ) 的内容复制/d/到目标路径 ( /sdcard/test/)。如果目标目录中已存在内容,则仅写入差异部分(增量传输)。这允许随时中止和继续该过程。将报告失败不停止整体复制操作。rsync默认情况下仅使用文件大小和上次修改时间执行“快速检查”。可以设置更多标准(见下文)。

  • --archive指定一组要检查差异的文件和目录属性
  • --itemize-changes指示打印每个文件的摘要。这对于理解为什么文件被认为是不同的非常有帮助rsync。这帮助我理解复制操作的失败。该消息相当神秘,请查看手册页以更好地理解它。
  • --delete指定删除目标位置中源位置中不存在的文件。

在我的具体情况下,当我从一个文件系统复制到另一个文件系统时,我使用了一组修改后的比较标准。也许这对您的情况也有帮助:

rsync --recursive --links --safe-links --times --group --owner --devices --specials --delete --human-readable --stats --verbose --itemize-changes --progress --modify-window=3 source/ target/

最显着的变化是:

  • --safe-links为了仅复制复制树中的符号链接
  • --perms(由 暗示--archive),因为目标文件系统上的权限未正确设置
  • --modify-window=NUM设置上次修改时间的容差,因为目标文件系统上的设置不正确

相关内容