Linux与macOS下MATLAB copyfile处理符号链接的异常行为问询
问题:MATLAB copyfile 复制含断链目录时行为不稳定?
测试代码 test_copyfile.m 如下:
%test_copyfile.m function test_copyfile() system('rm -rf folder*; mkdir folder1; cd folder1; touch a b c d e f g; ln -s d dlink; rm d; cd ..'); success = copyfile('folder1','folder2'); assert(success); fprintf('\nfolder1:\n'); dir('folder1') fprintf('\nfolder2:\n'); dir('folder2') assert(isequal({dir('folder1').name}, {dir('folder2').name})); return
在Ubuntu 22.04或macOS 13(Intel芯片)的MATLAB R2023b中运行该函数后,folder1 包含文件a、b、c、dlink、e、f、g,但folder2的内容不确定,有时仅含部分文件,有时为空,导致断言失败。多次测试未发现规律,请问该现象是否为预期行为?
解答
这不是预期行为,属于MATLAB copyfile 函数处理**断链(broken symbolic link)**时的bug。
- 问题根源:测试场景中
folder1存在指向已删除文件的断链dlink,copyfile在遍历复制时,处理断链过程中出现内部异常,导致后续文件复制流程随机中断,最终出现复制内容不完整甚至为空的情况。 - 验证方式:用系统原生命令
cp -r folder1 folder2手动复制,能完整保留所有文件和断链,说明问题出在MATLAB的函数实现上。 - 临时解决办法:替换
copyfile调用为系统原生复制命令,修改代码如下:% 替代原copyfile行 system('cp -r folder1 folder2'); - 后续建议:可以向MathWorks官方提交该bug,附上测试代码和运行环境信息。
内容的提问来源于stack exchange,提问作者Nuno
相关产品推荐
相关产品推荐

