Comment puis-je modifier un gros fichier sur place?


18

J'ai quelques fichiers de taille> 1 Go chacun. J'ai besoin de supprimer les derniers octets des fichiers. Comment puis-je le faire? Je préfère modifier le fichier en place pour économiser de l'espace disque.

Je suis sur HP-UX.


Je pense qu'il vima une limite 4G (pourrait être faux) mais je ne pense pas qu'il le fasse en place (pourrait être faux).
xenoterracide

1
@xenoterracide: Je n'ai pas vim ici :-( et vi donne une erreur "Fichier Tmp trop volumineux".
Hemant

1
@Hernant: Ce message vous dit tout ce que vous devez savoir sur l'édition en place: vi essaie de la copier sur / tmp pour travailler. Je pense que vim fera la même chose, et il aime créer une sauvegarde dans le même répertoire.
David Thornley

Réponses:


10

Essayez d'utiliser hexedit Je ne l'ai pas essayé sur HP-UX mais cela devrait fonctionner. Il vous permet de vous déplacer vers un emplacement dans un fichier et de le tronquer. Je suis à peu près sûr qu'il ne lit pas le fichier entier mais cherche simplement l'emplacement approprié pour l'affichage.

L'utilisation est assez simple une fois que vous l'avez lancée, les touches fléchées vous permettent de vous déplacer. F1 donne de l'aide. Ctrl-G se déplace vers un emplacement dans le fichier (astuce: pour se déplacer jusqu'à la fin, utilisez la taille du fichier à partir de la ligne inférieure de l'affichage). Positionnez le curseur sur le premier octet que vous souhaitez tronquer, puis appuyez sur Echap T une fois que vous avez confirmé que la troncature aura été effectuée. Ctrl-x se ferme.



6

Vous pouvez utiliser dd par exemple:

dd if=yourfile of=outname bs=4k count=thefirstX4kb

1
Merci pour votre réponse. Je préfère modifier le fichier en place pour économiser de l'espace disque. Si rien n'y fait, j'utiliserai dd :-).
Hemant

6

Utilisez un outil qui vous donne accès à l' truncateappel système. Vous ne pouvez le faire qu'avec les outils POSIX. Attention, tapé dans un navigateur; soyez particulièrement prudent car il ddest encore plus impitoyable d'erreurs que la commande unix habituelle. 123456 est le nombre d'octets à conserver.

dd if=/dev/null of=/file/to/truncate seek=1 bs=123456

Une version Perl est beaucoup plus lisible:

perl -e 'truncate "$ARGV[0]", 123456 or die $!' /file/to/truncate

1

Vous pouvez utiliser splitou ed, awkou n'importe quel langage de programmation.


Merci pour votre réponse. Je préfère modifier le fichier en place pour économiser de l'espace disque et de la mémoire.
Hemant
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.