OVH Cloud OVH Cloud

Tronquer un fichier en ligne de commande

7 réponses
Avatar
Hugues
Bonjour =E0 tous,

je recherche un moyen relativement simple, autre que 'dd', pour tronquer=
un
fichier en ligne de commande ?
Dans l'autre "sens", on trouve bien 'paste' ou 'cat', mais pour arrive=
r =E0
couper un fichier en plusieurs bouts selon une taille donn=E9e, je n'ai j=
amais
trouv=E9 !?=20

Je tombe g=E9n=E9ralement sur la page man de truncate(2), mais comme i=
ndiqu=E9,
c'est une routine syst=E8me, et non une commande utilisateur :-(

Je ne vois =E0 priori rien d'autre que 'dd', mais vous conviendrez que po=
ur un
non unixien, elle est peu ergnomique :-) (pas pour moi, pour un pote ! )


--=20
Hugues - Debianiste avant tout - http://www.nullpart.net/~hugues/Linux/

7 réponses

Avatar
Nicolas George
Hugues wrote in message :
je recherche un moyen relativement simple, autre que 'dd', pour tronquer un
fichier en ligne de commande ?
Dans l'autre "sens", on trouve bien 'paste' ou 'cat', mais pour arriver à
couper un fichier en plusieurs bouts selon une taille donnée, je n'ai jamais
trouvé !?


Euh, tronquer ou découper ? Pour découper, il y a split.

Avatar
Adrien Caillot
Hugues wrote:
Bonjour à tous,
Bonjour

Dans l'autre "sens", on trouve bien 'paste' ou 'cat', mais pour arriver à
couper un fichier en plusieurs bouts selon une taille donnée, je n'ai jamais
trouvé !?
La commande split fait cela très bien.

J'utilisais "split -b 1400k fichier" pour découper un fichier en
morceaux qui tenaient sur une disquette.

Avatar
TiChou
Dans le message <news:,
*Hugues* tapota sur f.c.o.unix :

Bonjour à tous,


Bonjour,

je recherche un moyen relativement simple, autre que 'dd', pour
tronquer un fichier en ligne de commande ?
Dans l'autre "sens", on trouve bien 'paste' ou 'cat', mais pour
arriver à couper un fichier en plusieurs bouts selon une taille donnée,
je n'ai jamais trouvé !?


La commande split.

Ou éventuellement aussi les commandes head et tail et leur option '-c'.

--
TiChou

Avatar
Thomas vO
bonjour,

À (at) Mon, 13 Jun 2005 16:15:27 +0200,
Hugues nous disait (told us):
Bonjour à tous,

je recherche un moyen relativement simple, autre que 'dd', pour
tronquer un fichier en ligne de commande ? Dans l'autre "sens", on
trouve bien 'paste' ou 'cat', mais pour arriver à couper un fichier
en plusieurs bouts selon une taille donnée, je n'ai jamais trouvé !?


vous devriez pouvoir vous en sortir avec 'head', 'tail' et 'wc', non ?

je vous accorde que ça doit pas forcément être des plus simples, mais
on doit pouvoir construire une solution avec...

--
Thomas vO - <http://www.enstimac.fr/~vanouden/>

Avatar
Hugues
Ce cher Adrien Caillot a dit :

Hugues wrote:
Bonjour à tous,
Bonjour

Dans l'autre "sens", on trouve bien 'paste' ou 'cat', mais pour arr iver à
couper un fichier en plusieurs bouts selon une taille donnée, je n'a i jamais
trouvé !?
La commande split fait cela très bien.

J'utilisais "split -b 1400k fichier" pour découper un fichier en
morceaux qui tenaient sur une disquette.



Magnifique, c'est exactement ce que je cherchais.

Merci a toi et a TiChou ;)

--
Hugues - Debianiste avant tout - http://www.nullpart.net/~hugues/Linux/


Avatar
Hugues
Ce cher Thomas vO a dit :

bonjour,

À (at) Mon, 13 Jun 2005 16:15:27 +0200,
Hugues nous disait (told us):
Bonjour à tous,

je recherche un moyen relativement simple, autre que 'dd', pour
tronquer un fichier en ligne de commande ? Dans l'autre "sens", on
trouve bien 'paste' ou 'cat', mais pour arriver à couper un fichier
en plusieurs bouts selon une taille donnée, je n'ai jamais trouvé !?


vous devriez pouvoir vous en sortir avec 'head', 'tail' et 'wc', non ?

je vous accorde que ça doit pas forcément être des plus simples, ma is
on doit pouvoir construire une solution avec...


S'il fallait utiliser cette methode, autant en revenir a dd :)
Comme repondu avant toi, la commande "split" est la plus adaptee a mon
probleme ;)


Merci quand meme
--
Hugues - Debianiste avant tout - http://www.nullpart.net/~hugues/Linux/


Avatar
Pascal Bourguignon
Nicolas George <nicolas$ writes:

Hugues wrote in message :
je recherche un moyen relativement simple, autre que 'dd', pour tronquer un
fichier en ligne de commande ?
Dans l'autre "sens", on trouve bien 'paste' ou 'cat', mais pour arriver à
couper un fichier en plusieurs bouts selon une taille donnée, je n'ai jamais
trouvé !?


Euh, tronquer ou découper ? Pour découper, il y a split.


Et pour tronquer il y a truncate(1):

/******************************************************************************
FILE: truncate.c
LANGUAGE: ANSI-C
SYSTEM: ANSI
USER-INTERFACE: ANSI
DESCRIPTION
Cette commande unix tronque (ou aggrandi) les fichiers passés en
paramètre, aux tailles indiquées.
USAGE
truncate [-size] {fichier} { -size {fichiers} }
AUTHORS
<PJB> Pascal J. Bourguignon
MODIFICATIONS
1994/12/06 <PJB> Creation.
BUGS
LEGAL

GPL
Copyright Pascal J. Bourguignon 1994 - 2002

This file is part of PJB-Tools.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; see the file COPYING; if not, write to
the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
******************************************************************************/
#include <stdio.h>
#if defined(AIX) || defined(Linux)
#include <unistd.h> /* truncate */
#include <sys/types.h>
#endif
#ifdef NeXT
#include <libc.h> /* truncate */
#endif

int main(int argc,char** argv)
{
int r;
int i;
int size;
const char* pname=argv[0];
size=0;
for(i=1;i<argc;i++){
if(argv[i][0]=='-'){
r=sscanf(argv[i]+1,"%d",&size);
if(r!=1){
fprintf(stderr,"%s: invalid size '%s'.n",pname,argv[i]+1);
fflush(stderr);
}
}else{
if(0!=truncate(argv[i],size)){
char message[BUFSIZ];
sprintf(message,"%s: truncating '%s'",pname,argv[i]);
perror(message);
fflush(stderr);
}
}
}
return(0);
}/*main*/

/*** truncate.c -- 2003-12-02 13:20:58 -- pascal ***/

--
__Pascal Bourguignon__ http://www.informatimago.com/
You're always typing.
Well, let's see you ignore my
sitting on your hands.