如何重复拆分unix中的大文件?

时间:2009-08-30 23:21:52

标签: macos unix terminal split

我遇到LaCie 500GB硬盘出现故障的情况。它只能持续大约10分钟,然后变得无法使用。对于那些10分钟左右,我确实完全掌控了。

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

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

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

谢谢!

-------- UPDATE ------------

现在在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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

咄! 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 length offset

相关问题