rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

Chercher un fichier avec find

calaceite, le samedi 12 mars 2005 à 14:27:29
Bonjour,

Admettons que je sois dans le répertoire racine et que je cherche la liste de tous les fichiers dont le nom commence par toto et qui ne sont pas dans l'arborescence /mnt. Je sais qu'il faut utiliser la commande find et l'option -prune mais impossible d'obtenir le résultat souhaité (suivant les cas je n'obtiens rien ou alors j'obtiens des centaines de fichiers et ça défile sans s'arrêt). quelqu'un peut-il me donner la ligne de commande ? Merci,


Calaz
Répondre à calaceite  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
asevere, le samedi 12 mars 2005 à 15:09:08
Salut,
find / -path '/mnt' -prune -o -name toto* -print
devrait te donner ce que tu veut :)
++ ...Mana mana
   Tutudutu...
Répondre à asevere

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
np34, le samedi 12 mars 2005 à 17:09:05
ok, manque juste des ' autour de toto*, soit :
find / -path '/mnt' -prune -o -name 'toto*' -print

sinon le shell bash risque d'interférer avec la commande find dans l'interprétation de toto*
Répondre à np34

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
calaceite, le samedi 12 mars 2005 à 15:27:18
Hélas, ça ne marche pas, le message d'erreur étant :

find: les chemins doivent précéder l'expression
Usage: find [CHEMIN] [EXPRESSION]


Calaz
Répondre à calaceite

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
asevere, le samedi 12 mars 2005 à 15:48:42
Bizar
Tu as bien taper la commande donnée?

c'est bien -path '/mnt' -prune ? ...Mana mana
   Tutudutu...
Répondre à asevere

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
np34, le samedi 12 mars 2005 à 17:56:36
cf message n°8, l'erreur est à cause des quotes ' qui manquent autour de toto*
Répondre à np34

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le samedi 12 mars 2005 à 15:49:23
Salut,

essaie avec ça

find / -name 'toto*' | egrep -vi '^(\/mnt)'


cherche dans / tous les fichers qui commence par toto et ensuite n'affiche pas
les fichiers de l'arborescence /mnt

Normalement de l'option i tu n'as pas besoin (c'est pour insensibilité à la case)
J'ai pris l'habitude de l'utilisé
Répondre à lami20j

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
calaceite, le samedi 12 mars 2005 à 16:22:05
Oui, mes excuses, je n'étais pas dans le répertoire racine. Donc, tu as raison ça marche maintenant il me reste à comprendre.

Merci beaucoup,

Calaz
Répondre à calaceite

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
calaceite, le samedi 12 mars 2005 à 16:36:18
OK merci lami20j, ta commande marche. Elle est cependant plus longue a execution que l'autre commande proposée ce qui est normal puisque si j'ai bien compris, le répertoire /mnt est visité mais les résultat ne sont pas affichés. Je vais regarder en détail sa syntaxe quand j'aurai étudié les expressions régulières.

Calaz
Répondre à calaceite

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le samedi 12 mars 2005 à 17:05:35
C'est vrai que la commande find est assez puissante .

Cependant si on combine find avec d'autres utilitaires (grep, egrep, perl) on peut peaufiner nos recherche grâce aux Expressions Régulières (Regular Expressions).

Par example le nom de fichier toto ou Toto ou toTo on peut le chercher avec :

find / | egrep -i '\/(to){2}'

ou si tu ne veux pas trouver toto ....

find / | egrep -vi '\/(to){2}'

Mais l'incovenient c'est que les 2 commandes peuvent trouver aussi totori

pas grave si tu écrit

find / egrep -vi '\/(to){2}\.' si le fichier a une extension

ou

find / egrep -vi '\/(to){2}\>' si le fichier n'a pas une extension

A toi de voir si tu veux ou pas apprendre les RE.
Tu n'as qu'à gagner du temps et de la simplicité.

Bonne journée.
Répondre à lami20j

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
asevere, le samedi 12 mars 2005 à 17:19:46
ceci dit, find à juste ce qu'il faut de joker pour réaliser la plutpart des recherhes 'utiles'.
et rajouter un grep a chaque find que tu fais, dans ta console et dans tes script peut te prendre un temps incalculable surtout utilisé comme dans le premier exemple -i '^\/mnt'.

Je suis pas persuadé qu'il y ai une seule recherche ou il soit vraiment nécéssaire d'utiliser grep...

++ ...Mana mana
   Tutudutu...
Répondre à asevere

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le samedi 12 mars 2005 à 17:34:04
"rajouter un grep a chaque find" - avec egrep j'ai écrit 36 caractères et avec find 41 (à toi de voir)

Tu as raison asevere concernat grep, en revanche avec Perl le temps c'est incalculable mais tu sais pourquoi?

Je te donne un coup de main.

Il est si petit que tu ne peux pas le calculer.

Et concernant '^\/mnt' tu as aussi raison parce qu'en fait ce n'est pas une RE plutôt une chaîne des caractères, c'était seulement une pauvre soulution vu que le demandeur n'arrivais pas s'en sortir avec find.

Mais je ne te ferai pas un cours de RE.

Bonne journée
Répondre à lami20j

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
asevere, le samedi 12 mars 2005 à 18:27:13
Ok:
"rajouter un grep à chaque find" - avec egrep j'ai écrit 36 caractères et avec find 41 (à toi de voir)

Je ne suis absolument pas certain que gagner du temps consiste a taper moins de caracteres.
Mais soyons fou!

Voici un jeu d'essai:
[root@XP1800 root]# cat time_test
#!/bin/sh
time ./time_test_1
time ./time_test_2
time ./time_test_3
time ./time_test_4

[root@XP1800 root]# cat time_test_1
#!/bin/sh
find / -path '/mnt' -prune -o -iname '*toto*' -print

[root@XP1800 root]# cat time_test_2
#!/bin/sh
find / -iname '*toto*' | egrep -vi '^(\/mnt)'

[root@XP1800 root]# cat time_test_3
#!/bin/sh
find / -iname '*toto*'

[root@XP1800 root]# cat time_test_4
#!/bin/sh
find / | egrep -i '.*toto.*'


Voici le resultat...
[root@XP1800 root]# ./time_test
/usr/share/apps/ksgmltools2/docbook/xsl/html/autotoc.xsl
/usr/share/apps/ksgmltools2/docbook/xsl/params/autotoc.label.separator.xml
/usr/share/sgml/docbook/yelp/docbook/html/autotoc.xsl
0.26user 0.57system 0:25.58elapsed 3%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+572minor)pagefaults 0swaps

/usr/share/apps/ksgmltools2/docbook/xsl/html/autotoc.xsl
/usr/share/apps/ksgmltools2/docbook/xsl/params/autotoc.label.separator.xml
/usr/share/sgml/docbook/yelp/docbook/html/autotoc.xsl
0.28user 3.07system 0:45.65elapsed 7%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (1major+1164minor)pagefaults 0swaps

/usr/share/apps/ksgmltools2/docbook/xsl/html/autotoc.xsl
/usr/share/apps/ksgmltools2/docbook/xsl/params/autotoc.label.separator.xml
/usr/share/sgml/docbook/yelp/docbook/html/autotoc.xsl
0.27user 1.94system 0:38.99elapsed 5%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+573minor)pagefaults 0swaps

/usr/share/apps/ksgmltools2/docbook/xsl/html/autotoc.xsl
/usr/share/apps/ksgmltools2/docbook/xsl/params/autotoc.label.separator.xml
/usr/share/sgml/docbook/yelp/docbook/html/autotoc.xsl
0.25user 2.98system 0:39.13elapsed 8%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (3major+1164minor)pagefaults 0swaps


Et encore, find utilise un cache qui joue sont role pour les test 3 et 4:
[root@XP1800 root]# cat time_test
#!/bin/sh
time ./time_test_2
time ./time_test_1
time ./time_test_4
time ./time_test_3


[root@XP1800 root]# ./time_test
/usr/share/apps/ksgmltools2/docbook/xsl/html/autotoc.xsl
/usr/share/apps/ksgmltools2/docbook/xsl/params/autotoc.label.separator.xml
/usr/share/sgml/docbook/yelp/docbook/html/autotoc.xsl
0.30user 1.98system 0:35.19elapsed 6%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1167minor)pagefaults 0swaps

/usr/share/apps/ksgmltools2/docbook/xsl/html/autotoc.xsl
/usr/share/apps/ksgmltools2/docbook/xsl/params/autotoc.label.separator.xml
/usr/share/sgml/docbook/yelp/docbook/html/autotoc.xsl
0.29user 0.63system 0:26.04elapsed 3%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+572minor)pagefaults 0swaps

/usr/share/apps/ksgmltools2/docbook/xsl/html/autotoc.xsl
/usr/share/apps/ksgmltools2/docbook/xsl/params/autotoc.label.separator.xml
/usr/share/sgml/docbook/yelp/docbook/html/autotoc.xsl
0.25user 3.13system 0:42.08elapsed 8%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1167minor)pagefaults 0swaps

/usr/share/apps/ksgmltools2/docbook/xsl/html/autotoc.xsl
/usr/share/apps/ksgmltools2/docbook/xsl/params/autotoc.label.separator.xml
/usr/share/sgml/docbook/yelp/docbook/html/autotoc.xsl
0.27user 1.90system 0:32.65elapsed 6%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+573minor)pagefaults 0swaps


Pour moi ça parle tout seul.

Mais je t'en prie, fait moi un cours sur les expressions réguliéres!
Je n'ai rien contre les expressions régulieres, mais jsute sur la facon de les utiliser.... :)
...Mana mana
   Tutudutu...
Répondre à asevere

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le samedi 12 mars 2005 à 18:40:44
Salut asevere,

Et tu as perdu ce temps pour me montrer que tu'as raison quand je t'ai donné raison???????????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!­!!!

Donc tu n'as rien compris. Si je te dit dans ma langue d'origine tu ne comprendras pas non plus.

Sur tous les plans je t'ai donné raison. Bien sur que c'est plus rapide avec find.

Et en plus j'ai dit que '^\/mnt' ce n'est pas une expression régulière.

Donc ou t'es têtu et tu veut montrer que t'as raison (je t'ai donné déjà raison) ou tu ne comprends pas trés bien ta langue. De toute façon comme ca tu n'arrive nul part.

Et concernant le cours sur les Expressions Régulières je te recommande le livre Maîtrise des Expressions Régulières ed. O'Reilly

Je croyais que les utilisateurs Linux sont plus ouverts, tu n'en fait pas
parti pour l'instant.

Bonne chance

P.S. Tu as fait aussi une affirmation concernant mv. Regarde ma réponse si
tu ne l'as pas vu encore :

Salut,

Je n'ai rien contre toi mai j'ai l'impression que tu veux imposer ton goût.

Je respecte tes opinions mais tu as écrit ca et ce n'est pas vrai.
"je rajouterai juste que mv (move) est fait, comme son nom l'indique, pour déplacer des fichiers et non les renomer :) "

Tape dans ta console man mv et tu verras :

MV(1) Manuel de l'utilisateur Linux MV(1)

NOM
mv - Déplacer ou renommer des fichiers.

@+

P.S. En général on repond aux questions, mais on ne fait pas la morale.
On est ici pour partager nos connaissances, après chaqu'un son choix.
Répondre à lami20j

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
asevere, le samedi 12 mars 2005 à 19:04:49
Trés bien,

Alors je vais te dire ou je voulais en venir.

"rajouter un grep a chaque find" - avec egrep j'ai écrit 36 caractères et avec find 41 (à toi de voir)
J'ai vu j'ai répondu.

Je vais même te faire l'affront de te dire que:
- find / -iname '*toto*' totalise 22 caractéres
- find / | egrep -i '.*toto.*' toalise 28 caractéres

Tu as raison asevere concernat grep, en revanche avec Perl le temps c'est incalculable [...]
Je vois pas ou te veut en venir, on m'aurait caché que perl est capable de remonter le temps !? :D
Hé oui...
find / -path '/mnt' -prune -o -iname '*toto*' -print et plus rapide a executer que find / -iname '*toto*' tout comme find / -iname '*toto*' l'est plus que find / donc perl, grep, ou n'importe quoi d'autre n'est pas capable d'arranger ça.

Mais la raison réel qui m'a fait te répondre, c'est que:
Tu as raison asevere concernat grep, en revanche avec Perl le temps c'est incalculable mais tu sais pourquoi?
Je te donne un coup de main.
Il est si petit que tu ne peux pas le calculer.
[...]
Mais je ne te ferai pas un cours de RE.


Tu te prends pour une référence ?
Qu'est ce qui te fait penser que tu es capable de donner un cours d'expression réguliere a quiconque ici ?

Et concernant '^\/mnt' tu as aussi raison parce qu'en fait ce n'est pas une RE plutôt une chaîne des caractères, c'était seulement une pauvre soulution vu que le demandeur n'arrivais pas s'en sortir avec find.

ça je suis contre, les commande linux sont des outils tous aussi puissants les uns que les autres, et je trouve vraiment dommage de ne pas profiter au maximum de toute les possibilitées offertes par chaque options qu'elles proposent.
Et je ne dirai jamais a quelqu'un qui a un tournevis mais que ne sais pas qu'il faut le faire tourner pour visser d'aller acheter une visseuse electrique.
...Mana mana
   Tutudutu...
Répondre à asevere

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
calaceite, le samedi 12 mars 2005 à 18:14:11
Concernant les expressions régulières, c'est quelque chose que je vais étudier dans le plus grand détail, j'ai déjà utilisé ce type d'outils sous Windows avec Agent Ransack mais ça restait très superficiel.

Pour l'instant, je me concentre sur find dont j'ai lu attentivement la page man mais qui continue à me rester obscure. D'après ce que j'ai testé, la commande

find / -path '/mnt' -prune -o -name 'toto*' -print

est en fait un raccourci pour

find / \( -path '/mnt' -prune \) -o \( -name toto* -a -print \)

où le -o signifie ou. Je connais bien la valeur logique du OU (qui est true dès qu'une des assertions est true) mais il n'empêche que la commande ci-dessus me reste mystérieuse en particulier je ne vois plus exactement ce que signifie la première assertion -path '/mnt' -prune qui d'ailleurs ne donne pas le même résultat si on la change en -path '/mnt' -a -prune. Si quelqu'un pouvait apporter un petit complément ça pourrait me débloquer même si apparemment je ne suis pas le premier à avoir du mal avec la syntaxe de find.


Calaz
Répondre à calaceite

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
asevere, le samedi 12 mars 2005 à 19:46:51
Pour l'option -prune, elle dis juste de ne pas déscendre dans le repertoire courant

Donc dans ta commande, tu vas chercher deux choses en quelques sorte soit le chemin '/mnt' que tu ne vas pas emprunter, soit des fichiers qui s'appellent 'toto*' dont tu vas afficher les noms :)
...Mana mana
   Tutudutu...
Répondre à asevere

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JC, le lundi 27 août 2007 à 11:53:05
bonjour

est-il possible avec la commande find et printf , d'afficher le type de fichier ? (rep ou fichier)

merci d'avance
Configuration: Windows XP
Firefox 2.0.0.6
Répondre à JC

21


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le lundi 27 août 2007 à 12:26:20
Salut,

Ben t'as l'option "-type" de find qui te permet de choisir ou les répertoires ou les fichiers (voir man find pour les autres choix), sinon tu peux passer par un truc du genre :
find  -exec stat -c "%n : %F" {} \;
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

22


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 JC, le lundi 27 août 2007 à 14:44:29
trop fort jp merci ça roule
je connaissais pas la commande stat (honte à moi)

@+
Répondre à JC
Logiciels pertinents trouvés dans les téléchargements
Télécharger FinderCleaner 1.9FinderCleaner - FinderCleaner est un utilitaire qui permet de supprimer les fichiers cachés spécifiques aux Mac. Il efface les...Catégorie: Gestion de fichiers
Licence: Freeware/gratuit
Télécharger Find Junk Files   6.01.25Find Junk Files - La plupart des applications sur Windows créent des fichiers temporaires sur votre disque dur durant leur fonctionnement. Ces...Catégorie: Nettoyage
Licence: Freeware/gratuit
Télécharger Super Finder   1.5.2.0Super Finder - Etes-vous frustrés d'utiliser le moteur de recherche par défaut sur Windows ? Et bien utilisez Super Finder. Super Finder...Catégorie: Gestion de fichiers
Licence: Freeware/gratuit
Télécharger OnyX 1.7.8OnyX - “OnyX est un utilitaire multi-fonctions (maintenance, optimisation et personnalisation). OnyX permet d'exécuter les...Catégorie: Optimisation
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « Chercher un fichier avec find »