2009-08-30 51 views
1

我遇到LaCie 500GB硬盤出現故障的情況。它只保持約10分鐘,然後變得無法使用。對於那10分鐘左右,我確實有完全的控制權。如何重複分割unix中的大文件?

我不能讓我的主要mov文件(160GB)快速轉移,所以我想如果我把它分成小塊,我可以將它們全部移出。我嘗試使用SPLIT命令分割電影文件,但它當然需要超過10分鐘。在結果失敗之前,我最終獲得了大約14GB的文件2GB。

有沒有一種方法可以使用split命令並跳過任何現有的文件塊,所以當我拆分該文件時,它將看到xaa,xab,xac並在該點之後開始,因此它將繼續拆分文件從xad開始?

或者有更好的選擇,可以分多個階段的文件?我也看了一下csplit,但那看起來也不是一個選項。

謝謝!

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

與BCAT和馬克的幫助下,我能夠做到這一點使用以下

現在

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 
+0

我希望得到我的手一個500TB的硬盤上,但也許他們不是太可靠; -D – pavium 2009-08-30 23:48:31

回答

4

您始終可以使用dd命令將舊文件的塊複製到新位置。這還有一個好處,就是不會對發生故障的驅動器進行不必要的寫入。像這樣使用dd可能會帶來如此龐大的mov文件,但您應該可以編寫一個簡單的shell腳本來自動完成部分過程。

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 

使用方法如下:

$紅寶石test.rb INPUT_FILE長度補償

+1

謝謝,但我不確定我的回答是否更好。你實際上給了工作代碼,這總是有用的。 – bcat 2009-08-30 23:40:06

+0

我認爲如果長度太大,我的問題可能會出現問題。除了dd的測試。 – 2009-08-30 23:43:33

+0

謝謝你們兩位! – 2009-08-30 23:45:13