GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer X octets à la fin d'un gros fichier sans lire tout le fichier ?

utiliser la fonction truncate

http://linux.die.net/man/2/truncate

int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length); 

tronquer prend le nom du fichier
ftruncate prend un descripteur de fichier ouvert

les deux fixent la longueur du fichier à length donc il tronque ou s'allonge (dans ce dernier cas, le reste du fichier sera rempli avec NULL/ZERO)

[modifier]
truncate (commande shell Linux) fonctionnera également

**SYNTAX**

truncate -s integer <filename>  
**OPTIONS**

-s number specify the new file length. If the new length is smaller than the current filelength data is lost. If the new length is greater the file is padded with 0. You can specify a magnitude character to ease large numbers:
b or B size is bytes.
k size is 1000 bytes.
K size is 1024 bytes.
m size is 10^6 bytes.
M size is 1024^2 bytes.
g size is 10^9 bytes.
G size is 1024^3 bytes.


**EXAMPLES**

To shrink a file to 10 bytes:

truncate -s 10 /tmp/foo

To enlarge or shrink a file to 345 Megabytes:

truncate -s 345M /tmp/foo

[/modifier]


Bien qu'il y ait eu beaucoup de références au truncate fonction dans ce fil, personne n'a vraiment répondu à la question de l'OP sur la réduction d'un fichier d'un montant fixe à partir d'un environnement de script. La réponse de Kevin a utilisé truncate pour redimensionner le fichier cible à un montant fixe, mais bien sûr, l'exactitude de cette solution nécessite que l'utilisateur connaisse d'abord la taille du fichier cible moins les données superflues à la fin. Donc, nous avons :

   -s, --size=SIZE
          set or adjust the file size by SIZE bytes

Truncate prend en charge la suppression directe des données à la fin d'un fichier cible en préfixant SIZE avec un - personnage.

Par exemple, pour redimensionner un fichier de 314 octets vous pouvez faire :

truncate --size=-314 target_file.bin


Utiliser "truncate" est le meilleur moyen, je poste juste quelques exemples :

  1. J'ai un fichier "PNav-h.db", il a 50176 octets.

    -rw-r--r--  1 user user 50176 Mar  8 23:43 PNav-h.db
     $truncate -s 1000 PNav-h.db
    

    il a défini la taille du fichier à 1000 octets

     -rw-r--r--  1 user user  1000 Mar  9 00:02 PNav-h.db
    
  2. Pour votre cas, utilisez $truncate --size=xxx xxfilename , en utilisant -<size number> pour réduire la taille du fichier

    $truncate --size=-300 PNav-h.db
    -rw-r--r--  1 user user   700 Mar  9 00:07 PNav-h.db
    

    taille du fichier final =1000-300=700

  3. en utilisant +<size number> pour augmenter la taille du fichier

    $truncate --size=+500 PNav-h.db
    -rw-r--r--  1 user user  1200 Mar  9 00:09 PNav-h.db
    

    taille du fichier final =700 + 500 =1200

  4. s'il n'y a pas de - ou + , c'est pour définir la taille du fichier.

    $truncate --size=60000 PNav-h.db
    -rw-r--r--  1 user user 60000 Mar  9 00:12 PNav-h.db 
    

    taille finale du fichier fixée à 60 000


Linux
  1. Comment ajouter une nouvelle ligne à la fin d'un fichier ?

  2. Comment répertorier le nième fichier le plus jeune (sans analyser Ls !) ?

  3. Comment supprimer le Bom d'un fichier UTF-8 ?

  4. Comment supprimer le mot de passe de votre clé SSL

  5. Comment afficher la taille/les détails du fichier à partir de la commande ls sous Unix

Comment supprimer le mot de passe d'un fichier PDF sous Linux

Comment supprimer les caractères (^M) d'un fichier sous Linux

Comment supprimer les retours à la ligne d'un fichier texte ?

Comment supprimer le périphérique de cache de bcache ?

Comment supprimer un fichier sans utiliser rm ?

Comment obtenir la taille physique d'un fichier sous Linux ?