Bonjour à tous, Je vous faire des recherches sur des fichiers avec find. seulement je n'arrive à lui dire comment chercher à partir de / mais sans aller dans /usr , /var ... par exemple. Je cherche des fichiers jpeg que j'ai pris avec mon APN qui et sont dispersés dans plusieur partitions (pas dans la hierarchie classique de GNU/Linux). Dans le page de manuel, il n'y rien du genre ignore ou exclude directories. Dans google, j'ai rien trouvé non plus. Il y a surement moyen de le faire, mais comment ? (en combinant avec grep?) Merci et bon week-end -- Bayrouni
On 2/18/06, Bayrouni <bayrouni@brutele.be> wrote:
Bonjour à tous, Je vous faire des recherches sur des fichiers avec find. seulement je n'arrive à lui dire comment chercher à partir de / mais sans aller dans /usr , /var ... par exemple. Je cherche des fichiers jpeg que j'ai pris avec mon APN qui et sont dispersés dans plusieur partitions (pas dans la hierarchie classique de GNU/Linux).
Dans le page de manuel, il n'y rien du genre ignore ou exclude directories. Dans google, j'ai rien trouvé non plus.
Pas avec find ... find peut rester dans un système de fichier, mais ne peut pas exclure des repertoires. Si tu veux chercher toute une arborescence (par exemple pas /usr, mais tout /usr/local) tu lui dis de commencer a cet endroit. Sinon, tu scriptes un find adapté à tes besoins ;-) Jeremy -- Linux Registered User #317862 Linux From Scratch Registered User #16571 Please do not send me .doc, .xls, .ppt, as I will *NOT* read them.
On 2006-02-18 11:41:28 +0100, Jeremy Monnet wrote:
Pas avec find ... find peut rester dans un système de fichier, mais ne peut pas exclure des repertoires.
Avec prune, il me semble que si. -- Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/> Work: CR INRIA - computer arithmetic / SPACES project at LORIA
On 2/18/06, Vincent Lefevre <vincent@vinc17.org> wrote:
On 2006-02-18 11:41:28 +0100, Jeremy Monnet wrote:
Pas avec find ... find peut rester dans un système de fichier, mais ne peut pas exclure des repertoires.
Avec prune, il me semble que si.
Un de ces jours, il faudra que tu nous fasses un cours de lecture de doc ! C'est vrai, avant de répondre, je lis toujours les mans (au moins) et tu arrives toujours à mettre le doigt sur ce qui me semble être la seule partie que j'ai sautée ... -wholename pattern File name matches shell pattern pattern. The metacharacters do not treat `/' or `.' specially; so, for example, find . -wholename './sr*sc' will print an entry for a directory called './src/misc' (if one exists). To ignore a whole directory tree, use -prune rather than checking every file in the tree. For example, to skip the directory `src/emacs' and all files and directories under it, and print the names of the other files found, do something like this: find . -wholename './src/emacs' -prune -o -print -prune If -depth is not given, true; if the file is a directory, do not descend into it. If -depth is given, false; no effect. Jeremy -- Linux Registered User #317862 Linux From Scratch Registered User #16571 Please do not send me .doc, .xls, .ppt, as I will *NOT* read them.
On 2006-02-18 12:41:36 +0100, Jeremy Monnet wrote:
Un de ces jours, il faudra que tu nous fasses un cours de lecture de doc !
Un truc à connaître, c'est la touche "/" sous "less": ça permet de faire une recherche, par exemple sur "ignor" (je ne mets volontairement pas le "e" pour matcher à la fois "ignore" et "ignoring"). Maintenant, les connaisseurs peuvent faire une recherche directement sur "prune". C'est *le* terme technique qui indique que lors d'une recherche dans un arbre (ici, l'arbre des fichiers, les noeuds internes étant les répertoires), on ne veut pas rechercher dans un sous-arbre donné. -- Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/> Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Jeremy Monnet wrote:
For example, to skip the directory `src/emacs' and all files and directories under it, and print the names of the other files found, do something like this: find . -wholename './src/emacs' -prune -o -print
Merci pour les réponses reçues. J'essaye d'appliquer ce nouveau acquis à mon cas, Je me place à la racine; donc find / j'utilise -wholename nom_d'un_rep (/usr en l'occurence), le tout suivi de prune afin de n'afficher que les fichiers ne se trouvant pas dans /usr: find / -wholename /usr -prune -o -print Et j'ai effectivement une sortie n'incluant pas ce qui est dans /usr J'essaye de pousser un peu plus et de n'afficher que les .jpeg Sans -prune je ferai : find / \( -name "*.jpg" -o -name "*.jpeg" \) et ça marche. Maintenant je m'efforce à combiner les deux: j'essaye: find / -wholename /usr -prune -o -print \ -type file \( -name "*.jpg" -o -name "*.jpeg" \) Mais je n'ai pas de sortie convenable Merci -- Bayrouni
On 2/18/06, Bayrouni <bayrouni@brutele.be> wrote:
Jeremy Monnet wrote:
For example, to skip the directory `src/emacs' and all files and directories under it, and print the names of the other files found, do something like this: find . -wholename './src/emacs' -prune -o -print
find / -wholename /usr -prune -o -print \ -type file \( -name "*.jpg" -o -name "*.jpeg" \)
Mais je n'ai pas de sortie convenable
Qu'appelles-tu "pas de sortie convenable" ? J'ai essayé : jems@doudou # find . -wholename ./rep1/rep2 -prune -o \( -name "untel" -o -name "file" \) -type f -print ./rep1/rep3/rep3/rep4/file ./rep1/rep3/rep3/file ./rep1/rep3/untel ./rep1/file Ca m'exclut bien rep1/rep2, et ca me trouve les fichiers untel et file, qui sont de type fichier ... Qu'est-ce que ca te trouve (ou pas ?) qui ne devrait pas (ou devrait ?) y être ? Jeremy -- Linux Registered User #317862 Linux From Scratch Registered User #16571 Please do not send me .doc, .xls, .ppt, as I will *NOT* read them.
Jeremy Monnet wrote:
On 2/18/06, Bayrouni <bayrouni@brutele.be> wrote:
Qu'appelles-tu "pas de sortie convenable" ?
J'ai essayé : jems@doudou # find . -wholename ./rep1/rep2 -prune -o \( -name "untel" -o -name "file" \) -type f -print ./rep1/rep3/rep3/rep4/file ./rep1/rep3/rep3/file ./rep1/rep3/untel ./rep1/file
Ca m'exclut bien rep1/rep2, et ca me trouve les fichiers untel et file, qui sont de type fichier ...
Qu'est-ce que ca te trouve (ou pas ?) qui ne devrait pas (ou devrait ?) y être ?
Jeremy --
Tout simplement la sortie n'affichait pas les jpeg et jpg, mais beaucoup d'autres fichiers. En regardant ton exemple, j'ai ajusté le mien :). Voici ma commande (qui marche maintenant): $ find / -wholename /usr -prune -o \( -name "*.jpg" _*-o*_ -name "*.jpeg" \) -type f -print le -o était placé dans un mauvais endroit, d'ailleurs que veut dire ce -o , j'ai la page sous les yeux, mais je ne le vois pas) Autre chose, le -print à la fin, je l'omets toujours et il y a toujours affichage. D'après la page de manuel: *-print* The primary shall always evaluate as true; it shall cause the current pathname to be written to standard output. meme en l'omettant j'ai le standard output ! Merci beaucoup à vous tous -- Bayrouni
On 2/18/06, Bayrouni <bayrouni@brutele.be> wrote:
Tout simplement la sortie n'affichait pas les jpeg et jpg, mais beaucoup d'autres fichiers. En regardant ton exemple, j'ai ajusté le mien :).
Voici ma commande (qui marche maintenant): $ find / -wholename /usr -prune -o \( -name "*.jpg" _*-o*_ -name "*.jpeg" \) -type f -print
le -o était placé dans un mauvais endroit, d'ailleurs que veut dire ce -o , j'ai la page sous les yeux, mais je ne le vois pas) -o veut dire "ou" et -a "et", c'est marqué dans la section "OPERATORS" du man de find
Autre chose, le -print à la fin, je l'omets toujours et il y a toujours affichage.
D'après la page de manuel: *-print* The primary shall always evaluate as true; it shall cause the current pathname to be written to standard output. meme en l'omettant j'ai le standard output !
C'est la magie des unix ;-) Sans blague, c'est une question de compatibilité historique, certaines versions de find n'affiche pas par défaut (alors que gnu find le fait). Tant que tu restes sur linux il y a de fortes chances que ca imprime. Si tu changes d'unix, gardes en tête que le comportement peut changer. Jeremy -- Linux Registered User #317862 Linux From Scratch Registered User #16571 Please do not send me .doc, .xls, .ppt, as I will *NOT* read them.
Jeremy Monnet wrote:
-o veut dire "ou" et -a "et", c'est marqué dans la section "OPERATORS" du man de find
Je n'ai pas osé le penser, pourtant je l'utilise bien cet op logique dans la commande. Maintenant j'ai une lecture plus cohérente de la commande: find / -wholename _ /usr -prune _ -o _\( -name "*.jpg" _*-o*_ -name "*.jpeg" \) _-type f -print
Si tu changes d'unix, gardes en tête que le comportement peut changer.
Je le retiendrais Il me reste cependant un petit obstacle à franchir. Je voudrais exclure plusieurs repertoires à la fois, alors j'ai essayé ceci à tout hasard: find / -wholename \( /var -o /usr -o /tmp \) -prune -o \( -name "*.jpg" -o -name "*.jpeg" \) -type f -print Mais ça ne marche pas: message d'erreur de find: find: les chemins doivent preceder l'expression Usage: find [-H] [-L] [-P] [CHEMIN...] [EXPRESSION] Cette commande find, ne finit pas de m'etonner (quelle puissance) et je ne suis qu'au début du chemin que j'espère pas trop semé d'embuscades:) Merci encore une fois -- Bayrouni
On 2/18/06, Bayrouni <bayrouni@brutele.be> wrote:
Il me reste cependant un petit obstacle à franchir. Je voudrais exclure plusieurs repertoires à la fois, alors j'ai essayé ceci à tout hasard: find / -wholename \( /var -o /usr -o /tmp \) -prune -o \( -name "*.jpg" -o -name "*.jpeg" \) -type f -print Mais ça ne marche pas:
message d'erreur de find: find: les chemins doivent preceder l'expression Usage: find [-H] [-L] [-P] [CHEMIN...] [EXPRESSION]
jems@doudou # find . -wholename ./rep1/rep2/rep3 -prune -o -wholename ./rep1/rep3/rep3 -prune -o \( -name "untel" -o -name "file" \) -type f -print ./rep1/rep2/file ./rep1/rep3/untel ./rep1/file le "ou" entre les wholename successifs, puis (dernier cas) les correspondances de fichiers a afficher. Jeremy -- Linux Registered User #317862 Linux From Scratch Registered User #16571 Please do not send me .doc, .xls, .ppt, as I will *NOT* read them.
Jeremy Monnet wrote:
jems@doudou # find . -wholename ./rep1/rep2/rep3 -prune -o -wholename ./rep1/rep3/rep3 -prune -o \( -name "untel" -o -name "file" \) -type f -print ./rep1/rep2/file ./rep1/rep3/untel ./rep1/file
le "ou" entre les wholename successifs, puis (dernier cas) les correspondances de fichiers a afficher.
Ca marche très bien, Je vais enfin respirer, prendre un bon café et faire un nettoyage à fond avec ce que je viens d'apprendre. Merci pour tes réponses claires et pertinentes. Merci pour ta patience -- Bayrouni
-wholename pattern File name matches shell pattern pattern. The metacharacters do not treat `/' or `.' specially; so, for example, find . -wholename './sr*sc' will print an entry for a directory called './src/misc'
J'ai regardé rapidement et n'existe pas sous BSD. Par contre -path, -ipath , -regex et -iregex sont présents sur les 2 systèmes. cordialement mc
participants (4)
-
Bayrouni
-
Jeremy Monnet
-
Marc Chantreux
-
Vincent Lefevre