Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Copier une arborescence en restreignant a certains fichiers

9 réponses
Avatar
Olivier Miakinen
Bonjour,

J'utilise cygwin sous Windows. Il y une arborescence de répertoires et
de fichiers contenant à la fois des fichiers source (*.cpp et *.h) et
des fichiers générés (*.dll, *.exe, etc.) ainsi que plein d'autres trucs
qui ne m'intéressent pas particulièrement. Je voudrais faire une copie
de l'arborescence, mais en ne conservant que les fichiers se terminant
par les caractères « .h » ou « .cpp ». Quelle méthode me conseilleriez-
vous pour cela ? Utiliser tar ou cpio par exemple ?

Noter que si les répertoires sont conservés même s'ils ne contiennent
aucun des fichiers, ce n'est pas très grave, mais j'aimerais quand même
éliminer de la copie tous les répertoires CVS. Si ce n'est pas possible,
je les virerai après coup via un find.

Cordialement,
--
Olivier Miakinen

9 réponses

Avatar
Stephane CHAZELAS
2008-07-24, 12:58(+02), Olivier Miakinen:
J'utilise cygwin sous Windows. Il y une arborescence de répertoires et
de fichiers contenant à la fois des fichiers source (*.cpp et *.h) et
des fichiers générés (*.dll, *.exe, etc.) ainsi que plein d'autres trucs
qui ne m'intéressent pas particulièrement. Je voudrais faire une copie
de l'arborescence, mais en ne conservant que les fichiers se terminant
par les caractères « .h » ou « .cpp ». Quelle méthode me conseilleriez-
vous pour cela ? Utiliser tar ou cpio par exemple ?


[...]

Oui, ou pax en combinaison avec find (et eventuellement grep).

Note que ca ne marche que si tu peux garantir que les noms des
fichiers ne contiennent pas de newline.

--
Stéphane
Avatar
Olivier Miakinen
Le 24/07/2008 13:05, Stephane CHAZELAS a écrit :

[...] Je voudrais faire une copie
de l'arborescence, mais en ne conservant que les fichiers se terminant
par les caractères « .h » ou « .cpp ». Quelle méthode me conseilleriez-
vous pour cela ? Utiliser tar ou cpio par exemple ?


[...]

Oui, ou pax en combinaison avec find (et eventuellement grep).



Je ne connaissais pas cette commande, et malheureusement je ne la vois
pas proposée en téléchargement pour cygwin. En revanche une recherche
de pages man sur le web montre qu'elle sait utiliser un nombre assez
respectable de formats d'archivage (bcpio, cpio, pax, tar, etc.). Bon,
eh bien je pense que je vais utiliser cpio, dès que j'aurai fini de
lire la doc.

Note que ca ne marche que si tu peux garantir que les noms des
fichiers ne contiennent pas de newline.



Oui, les noms de fichiers sont assez sympas, ils ne contiennent en gros
que les caractères [-_.a-zA-Z0-9] (et encore, pour les chiffres je ne
suis même pas sûr qu'il y en ait).

Merci !
Avatar
Stephane CHAZELAS
2008-07-24, 13:32(+02), Olivier Miakinen:
Le 24/07/2008 13:05, Stephane CHAZELAS a écrit :

[...] Je voudrais faire une copie
de l'arborescence, mais en ne conservant que les fichiers se terminant
par les caractères « .h » ou « .cpp ». Quelle méthode me conseilleriez-
vous pour cela ? Utiliser tar ou cpio par exemple ?


[...]

Oui, ou pax en combinaison avec find (et eventuellement grep).



Je ne connaissais pas cette commande, et malheureusement je ne la vois
pas proposée en téléchargement pour cygwin. En revanche une recherche
de pages man sur le web montre qu'elle sait utiliser un nombre assez
respectable de formats d'archivage (bcpio, cpio, pax, tar, etc.). Bon,
eh bien je pense que je vais utiliser cpio, dès que j'aurai fini de
lire la doc.



pax est la commande standard POSIX/Unix qui remplace tar (qui a
disparu de la SUS depuis la version 3) et cpio qui ne sont pas
POSIX. Faudrait peut-etre suggerer aux gars de Cygwin de
l'inclure.

--
Stéphane
Avatar
Olivier Miakinen
Le 24/07/2008 13:43, Stephane CHAZELAS a écrit :

pax est la commande standard POSIX/Unix qui remplace tar (qui a
disparu de la SUS depuis la version 3) et cpio qui ne sont pas
POSIX. Faudrait peut-etre suggerer aux gars de Cygwin de
l'inclure.



Apparemment la question n'est pas récente :

<http://www.cygwin.com/ml/cygwin/2004-11/msg00894.html>
pax is in the package paxutils, which is not yet in cygwin.
http://directory.fsf.org/paxutils.html
[...]
Note that paxutils includes unstable versions of tar and cpio. That
might be the explanation why.
</>

Traduction approximative : pax est dans le paquet paxutils qui n'est
pas encore dans cygwin [...] Noter que paxutils inclut des versions
instables de tar et cpio, ce qui pourrait expliquer.

Et en effet :

<http://directory.fsf.org/project/paxutils/>
Paxutils
The `paxutils' packages is an attempt to merge `cpio' with `tar' and add
support for the related 'pax' commmand and format required by POSIX. It
isn't production quality yet: only test versions are available. The
current stable versions of 'cpio' and 'tar' are separately maintained,
but the goal is to integrate them into 'paxutils.'
Last updated 23 May, 2005
</>

En gros, il y est dit que seules des versions de test sont disponibles,
et ceci date de 2005.
Avatar
Stephane CHAZELAS
2008-07-24, 15:29(+02), Olivier Miakinen:
[...]
<http://directory.fsf.org/project/paxutils/>
Paxutils
The `paxutils' packages is an attempt to merge `cpio' with `tar' and add
support for the related 'pax' commmand and format required by POSIX. It
isn't production quality yet: only test versions are available. The
current stable versions of 'cpio' and 'tar' are separately maintained,
but the goal is to integrate them into 'paxutils.'
Last updated 23 May, 2005
</>

En gros, il y est dit que seules des versions de test sont disponibles,
et ceci date de 2005.



Oui, mais il n'y a pas que GNU dans la vie. Il existe plusieurs
implementations libres de pax. Celle qu'on trouve chez debian
vient d'OpenBSD par exemple.

--
Stéphane
Avatar
Olivier Miakinen
Le 24/07/2008 15:50, Stephane CHAZELAS a écrit :

En gros, il y est dit que seules des versions de test sont disponibles,
et ceci date de 2005.



Oui, mais il n'y a pas que GNU dans la vie.



Dans la vie non, mais dans cygwin on dirait que si :

<http://cygwin.com/faq/faq-nochunks.html#faq.what>
The Cygwin tools are ports of the popular GNU development tools for
Microsoft Windows.
</>

Il existe plusieurs
implementations libres de pax. Celle qu'on trouve chez debian
vient d'OpenBSD par exemple.



Je ne suis pas assez à l'aise en anglais pour tenter d'argumenter en
faveur de l'utilisation d'un outil OpenBSD dans Cygwin. D'autant plus
que si la réponse n'est pas « non » ce sera certainement « fais-le
toi-même », et que je n'ai pas non plus le temps de m'y plonger.

Tant pis... pour le moment je vais me contenter de cpio, je passerai
à pax lorsqu'il sera disponible en standard.
Avatar
Jacques L'helgoualc'h
Le 24-07-2008, Olivier Miakinen a écrit :
[...]
Tant pis... pour le moment je vais me contenter de cpio, je passerai
à pax lorsqu'il sera disponible en standard.



Peut-être aussi rsync ? Quelque chose comme

rsync -ahuvx --include=*.h --include=*.cpp --exclude=*
rep/source/ rep/copie/

répond à la question (avec en réseau transfert des seuls changements).
--
Jacques L'helgoualc'h
Avatar
Matthieu Moy
Olivier Miakinen <om+ writes:

Bonjour,

J'utilise cygwin sous Windows. Il y une arborescence de répertoires et
de fichiers contenant à la fois des fichiers source (*.cpp et *.h) et
des fichiers générés (*.dll, *.exe, etc.) ainsi que plein d'autres trucs
qui ne m'intéressent pas particulièrement. Je voudrais faire une copie
de l'arborescence, mais en ne conservant que les fichiers se terminant
par les caractères « .h » ou « .cpp ». Quelle méthode me conseilleriez-
vous pour cela ? Utiliser tar ou cpio par exemple ?



Quelque chose comme ça :

rsync -av --include *.h --include *.cpp --exclude * source/ destination/

--
Matthieu
Avatar
Olivier Miakinen
Le 24/07/2008 17:41, Jacques L'helgoualc'h a écrit :

Peut-être aussi rsync ? Quelque chose comme

rsync -ahuvx --include=*.h --include=*.cpp --exclude=*
rep/source/ rep/copie/

répond à la question (avec en réseau transfert des seuls changements).



Le 24/07/2008 21:49, Matthieu Moy a écrit :

Quelque chose comme ça :

rsync -av --include *.h --include *.cpp --exclude * source/ destination/



Merci à tous les deux, je vais tester ça. En attendant, j'avais déjà
utilisé avec succès :

find . ( -name "*.h" -o -name "*.cpp" ) -print0
| cpio --null -pvd destination