mv命令移动文件但报告错误:无法统计没有这样的文件或目录

时间:2016-04-07 04:38:34

标签: linux bash rsync stat mv

我希望更有经验的一双眼睛能找到一些我不知道的明显的东西,或者能够帮助我解决mvrsync产生的错误。迎接挑战?

基本理念:
我有一个bash脚本,我可以自动将文件从一个目录移动到另一个目录。

问题:
当我运行脚本时,我会定期从mv命令中收到以下错误:
mv: cannot stat `/shares/directory with spaces/test file.txt': No such file or directoryvm命令的错误代码是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
  • 据推测,由于脚本是由root运行的,因此所有权和权限不应该成为问题。特别是如果文件系统不是基于熔丝的。
  • 基地"目录"在路径中(例如/ shares /)是同一文件系统上另一个目录的符号链接。
  • Linux的味道是Debian。

故障排除:
在试图消除变量扩展或其内容的任何问题时,我试着像这样硬连接bash脚本:
通过mv -v --no-clobber "/shares/directory with spaces/test file.txt" "/new destination/directory with spaces/test file.txt"验证" test file.txt"后ls -al存在。作为参考,权限是:-rw-r - r--
不幸的是,这也会导致同样的错误。

我能想到的其他可能的问题以及我试图排除它们的所作所为:

>>可能的问题:慢速HDD(或驱动器处于低功耗模式)或外部USB驱动器
>>调查结果:驱动器是所有本地SATA磁盘设置为不停放头。此外,即使从文件系统强制执行一致读取,也会发生相同的错误

>>可能的问题:非Linux,NFS或基于熔丝的文件系统
>>调查结果: nope,source和destination在同一个本地文件系统上,mount表示文件系统是ext4

>>可能的问题:文本路径中的空格或其他不可打印的字符
>>调查结果:验证了正确包装在引号中的源和目标路径

>>可能的问题:转义换行符后的延续问题(包裹命令后的空格)
>>调查结果:确保命令全部在一行,仍然是相同的错误

>>可能的问题: globbing(在指定要移动的文件时使用*)
>>调查结果: nope,每个文件都由路径和名称直接指定

>>可能的问题:路径混淆使用本地路径
>>调查结果: nope,文件路径从/

开始是完全限定的

>>可能的问题:文件实际上并不在指定的路径中 >>调查结果: nope,在ls -al

执行脚本之前验证了文件是否存在

>>可能的问题:不知何故,mv的--no-clobber导致了问题 >>调查结果: nope,尝试没有,同样的错误

>>可能的问题:只有通过Dropbox同步到文件系统创建的文件才有问题 >>调查结果: nope,直接通过touch new-local-file.txt创建了一个本地文件,它也产生了相同的stat()错误

我的分析:
mvrsync产生类似stat()错误的事实让我相信:

  • 在bash脚本中没有考虑到一些系统性的基础边界情况(例如文件权限/所有权或文件繁忙);或
  • 同样的错误在mvrsync场景中困扰着我。

期望的结果:
 1.可以确定间歇性错误的根本原因  2.根本原因可以解决或解决  3.可以改进bash脚本以便在发生错误时正常处理。

0 个答案:

没有答案