我在 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
设置上次修改时间的容差,因为目标文件系统上的设置不正确