Search code examples
linuxmacosmatlab

Strange behavior of `copyfile` regarding symlinks on Linux and macOS


Consider the following function.

%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

Running it in MATLAB R2023b on Ubuntu 22.04 or macOS 13 (Intel chip), I got the following result.

folder1:
  
.      ..     a      b      c      dlink  e      f      g      
  
  
folder2:
  
.   ..  b   f   
  
Error using assert
Assertion failed.
Error in test_copyfile (line 14)
assert(isequal({dir('folder1').name}, {dir('folder2').name}));

The test has been conducted on a few machines. It seems that the content of folder2 is not deterministic. Sometimes, it may be

folder2:
  
.   ..  a   g

or

folder2:
  
.   ..

But I have not recognized the pattern.

Is this expected?


Solution

  • Below is the response from MathWorks support.

    " Please be assured that this has been confirmed as a bug and is currently under thorough investigation by our development team. In the meantime, I have taken the initiative to attach your contact information to the relevant internal request. This ensures that you will be promptly notified when the bug is resolved in future releases. "