2009-08-30 4 views
1

J'ai une situation avec un disque dur LaCie de 500 Go défaillant. Il reste allumé pendant environ 10 minutes, puis devient inutilisable. Pour ces 10 minutes environ, j'ai un contrôle complet.Comment est-ce que je divise un grand fichier en unix de façon répétée?

Je ne parviens pas à transférer rapidement mon fichier mov principal (160 Go), donc je pensais que si je le divisais en petits morceaux, je pourrais tout déplacer. J'ai essayé de diviser le fichier vidéo en utilisant la commande SPLIT, mais cela a bien sûr pris plus de 10 minutes. Je me suis retrouvé avec environ 14 Go de fichiers 2 Go avant chaque échec.

Y at-il un moyen que je peux utiliser une commande split et ignorer les morceaux de fichiers existants, de sorte que je divise ce fichier, il verra xaa, xab, xac et commencer après ce point, il continuera à diviser le fichier en commençant par xad?

Ou existe-t-il une meilleure option qui peut diviser un fichier en plusieurs étapes? J'ai aussi regardé csplit, mais cela ne semblait pas non plus une option.

Merci!

-------- ------------ MISE À JOUR

Maintenant, avec l'aide de BCAT et Mark, j'ai pu le faire en utilisant les éléments suivants

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

Je voudrais mettre la main sur un disque dur 500TB, mais peut-être qu'ils ne sont pas trop fiables; -D – pavium

Répondre

4

Vous pouvez toujours utiliser la commande dd pour copier des blocs de l'ancien fichier dans un nouvel emplacement. Cela a l'avantage de ne pas effectuer d'écritures inutiles sur le disque défaillant. L'utilisation de dd comme ceci pourrait devenir ennuyeuse avec un tel gros fichier mov, mais vous devriez être capable d'écrire un simple script shell pour automatiser une partie du processus.

3

Duh! La réponse de bcat est bien meilleure que la mienne, mais depuis que j'ai écrit du code, je me suis dit que j'allais le publier.

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 

Utilisez comme ceci:

test.rb rubis $ fichier_entrée longueur décalage

+1

Merci, mais je ne suis pas sûr que ma réponse soit meilleure. Vous avez effectivement donné le code de travail, ce qui est toujours utile. – bcat

+0

Je pense que le mien peut donner des problèmes si la longueur est trop grande. Outre dd est bien testé. –

+0

Merci à vous deux! –

Questions connexes