Je veux réduire la taille d'un fichier par force brute, c'est-à-dire que je ne me soucie pas du reste, je veux juste couper le fichier, disons de moitié, et jeter le reste.
La première chose qui me vient à l'esprit est le tronqué de Perl . Je suis l'exemple sur cette page et j'ai fait exactement la même chose:
seq 9 > test.txt
ls -l test.txt
perl -we 'open( FILE, "< ./test.txt" ) && truncate( FILE, 8 ) && close(FILE);'
Mais le fichier a toujours la même taille:
$ ls -lgG test.txt
-rw-rw---- 1 18 2013-08-08 09:49 test.txt
Comment puis-je faire fonctionner cela?
ouvre le fichier en lecture. Cependant, pour tronquer le fichier, vous devez le modifier, de sorte qu'un descripteur de fichier en lecture seule ne fonctionnera pas. Vous devez utiliser le mode "modifier" (
"+>"
).Comme problème secondaire, cela m'étonne toujours lorsque les gens laissent les appels système échouer en silence et demandent ensuite ce qui n'a pas fonctionné. Une partie essentielle du diagnostic d'un problème consiste à examiner le message d'erreur produit; même si vous ne le comprenez pas, cela facilite la vie de ceux à qui vous demandez de l'aide.
Les éléments suivants auraient été un peu plus utiles:
même s'il est vrai que cela n'aurait fait état que d'un "argument invalide". Pourtant, ce sont des informations utiles et pourraient bien vous avoir conduit à la conclusion que le mode ouvert était incorrect (comme il l'a fait pour moi).
la source
Vous pouvez utiliser
tail
pour couper les 100 000 derniers octets, par exemple:-c affiche les 100 000 derniers octets du fichier, pour plus d'options:
Pour remplacer le fichier d'origine par le fichier que vous venez de générer:
la source
La réponse ci-dessus citant tronquer est agréable. dd fera également le travail:
la source
il y a une manière complètement différente de le faire, avec bash, en utilisant le programme ed. le script suivant ne conservera que les 5000 dernières lignes de tous les fichiers situés dans le répertoire spécifié. cela peut facilement être modifié pour boucler sur plusieurs répertoires, changer le nombre de lignes, etc.
la source