我希望一个更有经验的一双眼睛会发现一些很明显,我很想念或将能够帮助我解决了错误mv
并rsync
正在生产。迎接挑战吗?
基本思想:
我有一个bash脚本,可以在其中自动执行文件从一个目录到另一个目录的移动。
问题:
运行脚本时,定期从mv
命令中收到以下错误:
mv: cannot stat `/shares/directory with spaces/test file.txt': No such file or directory
。该vm
命令的错误代码为1。更奇怪的是,有时文件移动实际上成功了。
另外,我在脚本中有一个逻辑分支,可以交替使用rsync
(从与上述mv
命令相同的本地文件系统源和目标)移动/复制特定文件。我收到与stat()系统调用相关的类似错误:
rsync: link_stat "/shares/directory with spaces/test file.txt" failed: No such file or directory (2) rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.9]
运行脚本时,此错误并不总是很明显。有时,它会毫无问题地完成文件移动,而有时,当脚本连续运行几次时,它将一致地返回错误。
您还应该注意另外一个要素(并且我越来越怀疑这是困扰我的关键要素):目录/ shares /是一个受Dropbox安装监视的目录-表示已对其进行监视并通过Dropbox的安装进行镜像。在这一点上,我无法确定是否dropboxd
以某种方式锁定了文件或类似文件,从而无法对其进行统计。需要明确的是,这些文件最终无需进一步干预即可从此状态中释放出来,并且是mv
可用的。
代码:
mv -v --no-clobber "${SOURCEPATH}${item}" "${DESTINATIONPATH}${item}"
更多信息:
以下内容可能相关,也可能不相关:
mount
表示文件系统是ext4故障排除:
在尝试消除变量扩展或其内容的任何问题时,我尝试如下方式强制连接bash脚本:
mv -v --no-clobber "/shares/directory with spaces/test file.txt" "/new destination/directory with spaces/test file.txt"
通过ls -al
“ test file.txt”进行验证之后。作为参考,权限为:-rw-r--r--
不幸的是,这也会导致相同的错误。
我可能想到的其他可能问题以及为排除这些问题所做的工作:
>>可能的问题: HDD慢(或驱动器处于低功耗模式)或外部USB驱动器
>>发现:驱动器都是设置为非驻留磁头的所有本地SATA磁盘。此外,即使强制从文件系统中进行一致的读取,也会发生相同的错误
>>可能的问题:非基于Linux,NFS或基于保险丝的文件系统
>>发现:否,源和目标位于同一本地文件系统上,并mount
指示文件系统为ext4
>>可能的问题:文件路径中有空格或其他不可打印的字符
>>结果:已验证源路径和目标路径正确地用引号引起来
>>可能的问题:换行符转义后的继续问题(换行命令中\后面的空格)
>>发现:确保命令全部在一行上,仍然是相同的错误
>>可能的问题:遍历(在指定要移动的文件中使用*)
>>发现:否,每个文件均由路径和名称直接指定
>>可能的问题:使用本地路径导致路径混乱
>>发现:否,文件路径从/开始是完全限定的
>>可能的问题:文件实际上不在指定的路径中
>>发现:否,在通过执行脚本之前验证了文件是否存在ls -al
>>可能的问题: mv的--no-clobber导致问题
>>结果:不,尝试了一下,没有,同样的错误
>>可能的问题:只有通过Dropbox同步到文件系统创建的文件才是有问题的
>>发现:否,直接通过创建了本地文件touch new-local-file.txt
,它也产生了相同的stat()错误
我的分析:并产生类似的stat()错误
的事实使我相信:mv
rsync
mv
和rsync
场景中,相同的错误困扰着我。预期的结果:
1.可以确定间歇性错误的根本原因。
2.根本原因可以解决或解决。
3.可以改进bash脚本以在错误发生时正常处理。
因此,通过更多的故障排除,我rsync
在脚本中的前200行发现了一条有条件执行的错误语句(因此,行为似乎不一致)。该rsync --archive ...
语句/shares/
作为其源目录传递,因此影响了/shares/directory with spaces/
子目录。该子目录是mv
我上面的帖子中提到的麻烦命令的$ {SOURCEPATH} 。
最终,这是--dry-run
该rsync --archive ...
语句上的丢失标志,导致该脚本后来希望传递mv
给处理的文件被践踏。
感谢所有花时间阅读我的帖子的人。尽管我为自己和您的时间花在脚本中的错误上而感到沮丧,但令人放心的是知道:
-计算机不是非理性的
-我不是疯子
-没有邪恶的,根深蒂固的错误在linux文件系统中
对于那些由于您遇到的错误而在以后迷失了这篇文章的人cannot stat
,请阅读上面的我的故障排除说明。大量研究进入了该列表。其中之一可能是您的问题。如果没有,请继续进行调试,并进行解释。祝你好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句