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 :
-
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
-
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
-
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
-
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