我遇到了一种奇怪的情况,我不知道如何解决它:我在虚拟机上运行 Windows 10,它共享一个目录。此目录使用 SMB 挂载到 Linux 机器上。问题是,当我尝试将一个文件夹(里面有 700 个文件)从 Linux 复制到这个 SMB 目录时,有些文件不会被复制。但问题是,我尝试了、,cp
甚至复制到目标,但仍然无法获取里面的所有文件。此外,丢失的文件数量并不总是相同的——我得到了 670 到 700 个文件,但方式不可靠。而且,这个“错误”是无声的,所以我甚至不知道什么时候以及为什么有些文件没有被复制。scp
rsync
unzip
我甚至不知道如何调试这个问题,无论如何都不知道如何修复它,所以非常感谢任何帮助。
答案1
原来是复制过程开始时出现了某种超时问题。经过几次测试,我能够隔离问题并重现它。在目标上创建目录和复制其中的文件之间,出现了超时,因此第一个文件(随机数)未被复制。为什么?我不知道。
原始流程如下:
/source/directory/files.zip --> /target/directory/files/file_1
/files/file_2
:
:
/files/file_x
所以,
unzip /source/directory/files.zip -d /target/directory
应该导致
/target/directory/files/file_1 to file_x
像上面一样解压缩,或者在不同的本地目录中解压缩,然后cp
或mv
像这样
unzip /source/directory/files.zip
cp -r /source/directory/files /target/directory
或者
unzip /source/directory/files.zip
mv /source/directory/files /target/directory
效果不太好。
我最终完成了如下所示的两步脚本,并在两个步骤之间设置了延迟。
unzip /source/directory/files.zip
mkdir /target/directory/files
sleeep 2
mv /source/directory/files/* /target/directory/files