Come posso modificare un file di grandi dimensioni in atto?


18

Ho alcuni file di dimensioni> 1 GB ciascuno. Devo rimuovere gli ultimi byte dai file. Come posso farlo? Preferisco modificare il file in atto per risparmiare spazio su disco.

Sono su HP-UX.


Penso che vimabbia un limite di 4G (potrebbe essere sbagliato) ma non credo che lo faccia sul posto (potrebbe essere sbagliato).
xenoterracide,

1
@xenoterracide: non ho vim qui :-( e vi dà l'errore "File Tmp troppo grande".
Hemant,

1
@Hernant: quel messaggio ti dice tutto ciò che devi sapere sulla modifica in atto: vi sta cercando di copiarlo su / tmp su cui lavorare. Penso che vim farà la stessa cosa, e gli piace creare un backup nella stessa directory.
David Thornley,

Risposte:


10

Prova a usare hexedit Non l'ho provato su HP-UX ma dovrebbe funzionare. Ti consente di spostarti in una posizione in un file e troncare. Sono abbastanza sicuro che non legge l'intero file ma cerca solo nella posizione appropriata per la visualizzazione.

L'utilizzo è abbastanza semplice una volta avviato, i tasti freccia consentono di spostarsi. F1 dà aiuto. Ctrl-G si sposta in una posizione nel file (suggerimento: per spostarsi alla fine utilizzare la dimensione del file dalla riga inferiore del display). Posizionare il cursore sul primo byte che si desidera troncare, quindi premere Esc T dopo aver verificato che il troncamento sarà stato eseguito. Ctrl-x esce.



6

Puoi usare dd per esempio:

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

1
Grazie per la risposta. Preferisco modificare il file in atto per risparmiare spazio su disco. Se nulla aiuta, userò dd :-).
Hemant,

6

Utilizzare uno strumento che consente di accedere alla truncatechiamata di sistema. Puoi farlo con solo gli strumenti POSIX. Attenzione, digitato in un browser; stai particolarmente attento perché ddè ancora più spietato degli errori rispetto al solito comando unix. 123456 è il numero di byte da conservare.

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

Una versione Perl è molto più leggibile:

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

1

Puoi usare splito ed, awko qualsiasi linguaggio di programmazione.


Grazie per la risposta. Preferisco modificare il file in atto per risparmiare spazio su disco e memoria.
Hemant,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.