【问题标题】:How do I split a large file in unix repeatedly?如何在unix中重复拆分大文件?
【发布时间】:2009-08-30 23:21:52
【问题描述】:

我遇到了 LaCie 500GB 硬盘出现故障的情况。它仅持续约 10 分钟,然后变得无法使用。在这 10 分钟左右的时间里,我确实拥有完全的控制权。

我无法将我的主 mov 文件(160GB)快速转移,所以我想如果我将它分成小块,我可以将它们全部转移。我尝试使用 SPLIT 命令拆分电影文件,但它当然需要超过 10 分钟。在失败之前,我最终得到了大约 14GB 的文件,每个 2GB。

有没有办法可以使用拆分命令并跳过任何现有文件块,所以当我拆分此文件时,它将看到 xaa、xab、xac 并在该点之后开始,因此它将继续拆分文件开始有 xad 吗?

或者有没有更好的选择可以将文件分成多个阶段?我也查看了 csplit,但这似乎也不是一个选项。

谢谢!

-------- 更新 ------------

现在在 bcat 和 Mark 的帮助下,我能够使用以下方法做到这一点

dd if=/Volumes/badharddrive/file.mov of=/Volumes/mainharddrive/movieparts/moviepart1 bs=1g count=4
dd if=/Volumes/badharddrive/file.mov of=/Volumes/mainharddrive/movieparts/moviepart2 bs=1g count=4 skip=4
dd if=/Volumes/badharddrive/file.mov of=/Volumes/mainharddrive/movieparts/moviepart3 bs=1g count=4 skip=8
etc
cat /Volumes/mainharddrive/movieparts/moviepart[1-3] -> newmovie.mov

【问题讨论】:

  • 我想要一个 500TB 的硬盘,但可能不太可靠 ;-D

标签: macos unix terminal split


【解决方案1】:

您始终可以使用dd 命令将旧文件的块复制到新位置。这还有一个额外的好处,那就是不对故障驱动器进行不必要的写入。像这样使用dd 可能会因如此大的 mov 文件而变得乏味,但您应该能够编写一个简单的 shell 脚本来自动化部分过程。

【讨论】:

    【解决方案2】:

    呃! bcat 的回答比我的要好得多,但是因为我写了一些代码,所以我想我会继续发布它。

    input = ARGV[0]
    length = ARGV[1].to_i
    offset = ARGV[2].to_i
    
    File.open "#{input}-#{offset}-#{length}", 'w' do |file|
      file.write(File.read input, length, offset)
    end
    

    像这样使用它:

    $ ruby​​ test.rb input_file 长度偏移

    【讨论】:

    • 谢谢,但我不确定我的回答是否更好。您实际上提供了工作代码,这总是有用的。
    • 我认为如果长度太大,我的可能会出现问题。除了 dd 久经考验。
    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2017-04-15
    • 2010-10-30
    • 1970-01-01
    • 2015-10-25
    相关资源
    最近更新 更多