Téléchargement
illégal
Posez votre question Signaler

Shell linux, commande find [Résolu]

chris79 50Messages postés 3 octobre 2005Date d'inscription 30 septembre 2011Dernière intervention - Dernière réponse le 18 févr. 2010 à 16:40
Bonjour,
Je possède un répertoire "source" contenant plusieurs répertoires et plusieurs fichiers.
Je dois copier ce répertoire ailleurs dans "dest" à l'exception de
- certains sous-répertoires #cas 1
- certains fichiers #cas 2
- tout le contenu de certains sous-répertoires (en gros je garde le répertoire vide :-) #cas 3
Pour illustrer par un exemple pas du tout (mais alors pas du tout) optimisé :
> cp -R source dest
> rm -r dest/include/ #cas1
> rm dest/<fichier quelconque # cas 2
> rm -r dest/coco/bidule/* #cas 3
Je sais que je peux le faire avec la commande find ??????? -exec rm -r {} (quelque chose comme ça :-) mais je n'y arrive pas, il y a rien à faire :-(, j'ai même bloquer mon pc, plus de clavier... !
Alors si quelqu'un maitrise cette commande ô combien puissante, j'attends son commentaire avec impatience.
Sinon une solution avec un bon vieux "grep -v" me paraitrait moins "optimale" (quoique) mais serait la bienvenue également.
Merci.
Lire la suite 

Shell linux, commande find »

10 réponses
Réponse
+0
moins plus
bonsoir,
je ne suis pas un pro du bash loin de la ...
mais il me semble que pour le cas 1 tu peux faire

cp $(ls |sed -e '/nomdurepignoré/*/d')

pour le 2

cp $(ls |sed -e '/nomdufichier*/d')

pour le 3 hmmm
en esperant que ca t'aide ...
chris79- 10 févr. 2010 à 10:12
Je n'avais effectivement pas pensé à quelque chose comme ça, mais je vais tenter.
Je te tiens au courant.
Merci.
Ajouter un commentaire
Réponse
+0
moins plus
/usr/share/doc/bash (exemples)
/usr/share/doc-base/bash (tutos)
chris79- 10 févr. 2010 à 10:13
Merci pour les liens, je vais jeter un oeil :-)
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

Sur une seule commande ce n'est pas possible, et à la limite, ta solution est sûrement ce qui irait le mieux.

Il faut surtout prendre en compte si ce que tu veux faire est une tâche isolée (à ne faire qu'une fois) ou une tâche répétitive.

Si ce n'est qu'une seule fois, ta méthode reste la plus optimisée.

Si répétition, voir alors avec des commandes comme "rsync" ou "tar" qui incluent des paramètres permettant d'exclure des répertoires et des fichiers lors du traitement.

La commande "find" pour ce genre de chose reste assez lourde, surtout la syntaxe de l'option "-prune" pour omettre des répertoires et/ou fichiers..
Ajouter un commentaire
Réponse
+0
moins plus
C'est effectivement une tache répétitive destinée à être exécutée dans un script.

Pis surtout, mon répertoire source fait environ 400 Mo alors que le répertoire dest, une fois nettoyé, fait environ 20 Mo !! Alors copier 380 Mo pour les effacer la ligne suivante...je ne trouve pas cela terrible :-).

Par contre une solution à base de "tar" me parait intéressante....je vais voir cela plus en détail.

Dans tous les cas, merci !
jipicy- 10 févr. 2010 à 10:25
Dans ce cas là, rsync me parait encore plus approprié alors...
Ajouter un commentaire
Réponse
+0
moins plus
pourquoi ma proposition est elle "mauvaise" ?
(je cherche a apprendre un ...)
jipicy- 10 févr. 2010 à 10:49
Elle n'est pas mauvaise, c'est juste que ce qu'il veut faire est assez biscornu, et si on commence à se lancer dans des commandes comme celles citées plus haut, il n'est pas arrivé ;-\

A partir du moment où il existe des commandes ou des programmes implémentant nativement les besoins recherchés, pas la peine de se casser la tête à chercher (ou juste pour se faire plaisir alors) des solutions quelque peu tordues, non ?
Ajouter un commentaire
Réponse
+0
moins plus
Salut,
bon je viens poster la solution que j'ai retenue, c'est celle à base de la commande rsync.
Cela donne quelque chose comme :

rsync -rltgoDv --exclude=include --exclude=<fichier quelconque> --exclude=coco/bidule/* source dest

Cela respecte précisément ce que je voulais faire.
Merci à vous !
++
Ajouter un commentaire
Ce document intitulé « Shell linux, commande find » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?