Как мне разбить большой файл в Unix несколько раз? - PullRequest
1 голос
/ 31 августа 2009

У меня ситуация с неисправным жестким диском LaCie 500GB. Он остается включенным только около 10 минут, а затем становится непригодным для использования. В течение этих 10 минут у меня есть полный контроль.

Я не могу передать мой основной файл mov (160 ГБ) так быстро, поэтому я подумал, что если я разделю его на маленькие кусочки, я смогу удалить их все. Я попытался разделить файл фильма с помощью команды SPLIT, но, конечно, это заняло больше 10 минут. В итоге у меня было около 14 ГБ файлов по 2 ГБ каждый, прежде чем это не удалось.

Есть ли способ, с помощью которого я могу использовать команду split и пропустить любые существующие куски файлов, поэтому, когда я разбиваю этот файл, он увидит 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

Ответы [ 2 ]

4 голосов
/ 31 августа 2009

Вы всегда можете использовать команду dd для копирования фрагментов старого файла в новое место. Это дает дополнительное преимущество, заключающееся в том, что вы не выполняете ненужные записи на неисправный диск. Подобное использование dd может быть утомительным для такого большого файла MOV, но вы должны иметь возможность написать простой сценарий оболочки для автоматизации части процесса.

3 голосов
/ 31 августа 2009

Duh! Ответ 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 смещение длины входного_файла

...