2

这很奇怪……我终其一生都无法弄清楚为什么会这样。

  1. 我有一个文件夹,里面装满了各种 CoffeeScript、SASS、HTML 和 XML 文件。
  2. 我有一个Ruby 脚本,它把它们全部编译,然后将它们压缩成一个主 XML 文件(它用于 iGoogle Gadget 开发)。
    • 这个脚本使用命令行参数trollop(我只是为了澄清下面的代码)。
  3. 我希望此脚本将此文件从创建它的当前目录复制到将运行它的目标目录。

到目前为止,构建/编译/缩小步骤就像魔术一样运行。它是#3 无聊到暮光区级别。

#!/usr/bin/ruby
…
if opts[:deploy_local]
  FileUtils.cp 'build.xml', '/path/to/destination/'
  puts "Copied #{written_file_name} to #{output_destination}." if opts[:verbose]
end

当这复制文件时,目标文件被截断大约 3/4 的路径。源文件就好了。但是,出于某种奇怪的原因,移动文件就像一种魅力。

  FileUtils.mv 'build.xml', '/path/to/destination/'

为了增加另一个层次的怪异,如果我只是做一个系统副本,它也会被截断。

  system("cp build.xml /path/to/destination")

FWIW,我zsh从而不是运行这个脚本bash。在这两种情况下(复制和移动),源文件和目标文件都没有被任何其他进程使用。

任何人都可以解释这种怪异的行为吗?

4

1 回答 1

3

一些东西:

  • 您是否正在移动到相同的磁盘卷?如果是这样,那么,是的,cam 关于原子性的评论绝对是正确的;操作系统可能只是在移动过程中弄乱了 inode 表,而不是写出数据。如果您要在卷之间移动数据,那么事情就不会那么简单了。

  • 你试过通过吗

    :verbose => true
    

    FileUtils.cp 命令?这可能会给出有关故障的诊断。

于 2011-12-03T17:59:13.687 回答