Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:systeme:find [27/12/2012 07:59] smolski [Quelques options] |
doc:systeme:find [26/08/2013 15:54] smolski [Find] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | //Page en cours de modification : 08 déc 12// | ||
- | |||
====== Find ====== | ====== Find ====== | ||
+ | |||
+ | (//testé// - **smolski** 26/08/2013) Le retour sur le forum est ici : [[http://debian-facile.org/viewtopic.php?id=7310 | Lien vers le forum concernant ce tuto]] | ||
+ | N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs ! | ||
+ | |||
+ | * Objet : find | ||
+ | * Niveau requis : DÉBUTANT | ||
+ | * Tags : | ||
+ | * Commentaires : //recherche de fichiers. // | ||
+ | * Débutant, à savoir : [[manuel:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
+ | |||
+ | |||
+ | Les exemples de ce tuto sont tous à faire en //user// sauf spécification. | ||
Cette commande permet de faire des recherches de fichier ou de dossier dans une hiérarchie de répertoires. | Cette commande permet de faire des recherches de fichier ou de dossier dans une hiérarchie de répertoires. | ||
Par exemple, je voudrais chercher le log messages, mais je sais pas où se trouve ce fichier, faites : | Par exemple, je voudrais chercher le log messages, mais je sais pas où se trouve ce fichier, faites : | ||
+ | <code bash> | ||
+ | find / -name 'messages'</code> | ||
- | portable:/home/mattux # find / -name 'messages' | + | <code> |
- | /var/log/messages | + | /var/log/messages</code> |
- | portable:/home/mattux # | + | |
- | Voilà la réponse : | + | Voilà la réponse : \\ |
- | il se trouve dans le répertoire /var/log. | + | Il se trouve dans le répertoire ''/var/log''. |
== Nota == | == Nota == | ||
- | Notez l'utilisation des apostrophes __afin d'éviter que l'interpréteur de commande n'étende le motif__. Elles sont inutiles dans ce cas-ci mais c'est une bonne pratique de toujours les utiliser afin d'éviter l'extension //motif//. | + | Notez l'utilisation des apostrophes __afin d'éviter que l'interpréteur de commande n'étende le motif__. \\ |
+ | Elles sont inutiles dans ce cas-ci mais c'est une bonne pratique de toujours les utiliser afin d'éviter l'extension //motif//. | ||
===== Quelques options ===== | ===== Quelques options ===== | ||
Ligne 27: | Ligne 39: | ||
|-name |//recherche par motif en respectant la casse// | | |-name |//recherche par motif en respectant la casse// | | ||
|-iname |//recherche par motif sans respecter la casse// | | |-iname |//recherche par motif sans respecter la casse// | | ||
+ | |||
===== Recherche simple par nom ===== | ===== Recherche simple par nom ===== | ||
Exemple simple : comment trouver un fichier portant le nom ''note'' ? | Exemple simple : comment trouver un fichier portant le nom ''note'' ? | ||
- | + | <code bash> | |
- | $ find / -name 'note' | + | find / -name 'note'</code> |
Décomposition de la commande de l'exemple : | Décomposition de la commande de l'exemple : | ||
Ligne 38: | Ligne 51: | ||
- "''-name'' " est l'option qui indique ici que nous voulons spécifier le nom d'un fichier. | - "''-name'' " est l'option qui indique ici que nous voulons spécifier le nom d'un fichier. | ||
- | Après un long délai d'attente, la recherche se faisant dans toute l'arborescence de la partition, la réponse fini par venir | + | Après un long délai d'attente, la recherche se faisant dans toute l'arborescence de la partition, la réponse fini par venir : |
/home/martin/note | /home/martin/note | ||
Ligne 49: | Ligne 61: | ||
Pour chercher tous les fichiers commençant par //note// et définir à partir de quel répertoire on souhaite effectuer la recherche on utilise cette syntaxe : | Pour chercher tous les fichiers commençant par //note// et définir à partir de quel répertoire on souhaite effectuer la recherche on utilise cette syntaxe : | ||
- | + | <code bash> | |
- | $find /home/martin -name 'note*' | + | find /home/martin -name 'note*'</code> |
===== Recherche par nom simple & multiple ===== | ===== Recherche par nom simple & multiple ===== | ||
Ligne 56: | Ligne 68: | ||
Maintenant, regardons, encore une fois à l'aide d'un exemple, la syntaxe de la commande **find** si l'on recherche plutôt un ou plusieurs répertoires. | Maintenant, regardons, encore une fois à l'aide d'un exemple, la syntaxe de la commande **find** si l'on recherche plutôt un ou plusieurs répertoires. | ||
- | Je cherche à trouver les répertoires archives dans /media/homebis | + | Je cherche à trouver les répertoires archives dans /media/homebis. |
- | # find /media/homebis -type d -name 'archives' | + | Première chose à noter, il peut-être nécessaire de se mettre en [[commande:su|root]] pour avoir accès à tous les répertoires. |
- | + | <code bash> | |
- | Première chose à noter, il peut être nécessaire de se mettre en root pour avoir accès à tous les répertoires. | + | find /media/homebis -type d -name 'archives'</code> |
Dans ce cas-ci, je demande donc à **find** de trouver les répertoires | Dans ce cas-ci, je demande donc à **find** de trouver les répertoires | ||
Ligne 73: | Ligne 85: | ||
/media/homebis/Documents_gr/mes_fichiers/archives | /media/homebis/Documents_gr/mes_fichiers/archives | ||
- | Autre exemple un peu plus complexe cette fois. Je désire faire une recherche de tous les fichiers audio de type .mp3 et .ogg | + | Autre exemple un peu plus complexe cette fois. \\ |
+ | Je désire faire une recherche de tous les fichiers audio de type .mp3 et .ogg | ||
- | Il existe plus d'une façon d'y arriver. Voyons comment on peut s'y prendre. | + | Il existe plus d'une façon d'y arriver. \\ |
+ | Voyons comment on peut s'y prendre. | ||
- | Première façon : | + | ==== Première façon : ==== |
- | find /home/martin/ \( -name '*.mp3' -o -name '*.ogg' \) | + | |
- | On peut noter l'utilisation du -o qui correspond à l'opérateur ou ("or" en anglais) | + | <code bash> |
+ | find /home/martin/ \( -name '*.mp3' -o -name '*.ogg' \)</code> | ||
+ | <note>On peut noter l'utilisation du -o qui correspond à l'opérateur ou ("or" en anglais)</note> | ||
Cela me donnera toute une liste de fichiers /home/martin/... | Cela me donnera toute une liste de fichiers /home/martin/... | ||
- | Deuxième façon : | + | ==== Deuxième façon : ==== |
Une autre manière d'écrire la commande ci-dessus est la suivante : | Une autre manière d'écrire la commande ci-dessus est la suivante : | ||
- | find -type f -name "*.mp3" -o -name "*.ogg" | + | <code bash> |
+ | find -type f -name "*.mp3" -o -name "*.ogg"</code> | ||
- | Si je tape cette commande en étant dans mon répertoire /home/martin, le résultat sera une liste de fichiers ./.... | + | Si je tape cette commande en étant dans mon répertoire /home/martin, le résultat sera une liste de fichiers ./.... \\ |
- | + | Il est intéressant de savoir que l'on peut étendre la recherche aux fichiers mp3 et mp4 en remplaçant le 3 par un ?((Voir : [[manuel:regexp]])). La commande deviendrait donc : | |
- | Il est intéressant de savoir que l'on peut étendre la recherche aux fichiers mp3 et mp4 en remplaçant le 3 par un ?. La commande deviendrait donc : | + | <code bash> |
- | find -type f -name "*.mp?" -o -name "*.ogg" | + | find -type f -name "*.mp?" -o -name "*.ogg"</code> |
===== Filtrer en fonction des droits ===== | ===== Filtrer en fonction des droits ===== | ||
Ligne 100: | Ligne 117: | ||
Voici par exemple comment obtenir la liste de tout les fichiers dans le repertoire ''/bin'' qui ont le ''bit setuid valant 1'' : | Voici par exemple comment obtenir la liste de tout les fichiers dans le repertoire ''/bin'' qui ont le ''bit setuid valant 1'' : | ||
+ | <code bash> | ||
+ | find /bin -perm /5000 -user root<code> | ||
<code> | <code> | ||
- | $ find /bin -perm /5000 -user root | ||
/bin/su | /bin/su | ||
/bin/mount | /bin/mount | ||
Ligne 117: | Ligne 135: | ||
Voici par exemple la recherche de tous les fichiers terminant par ''.java'' dans le dossier courant: | Voici par exemple la recherche de tous les fichiers terminant par ''.java'' dans le dossier courant: | ||
+ | <code bash> | ||
+ | find . -name '*.java'<code> | ||
<code> | <code> | ||
- | $ find . -name '*.java' | ||
./java/jdk1.5.0_06/demo/applets/Animator/Animator.java | ./java/jdk1.5.0_06/demo/applets/Animator/Animator.java | ||
./java/jdk1.5.0_06/demo/applets/ArcTest/ArcTest.java | ./java/jdk1.5.0_06/demo/applets/ArcTest/ArcTest.java | ||
Ligne 144: | Ligne 163: | ||
Par exemple ainsi : | Par exemple ainsi : | ||
- | + | <code bash> | |
- | $ find /home/mon_user/test/ -type f -exec echo {} \+ | + | find /home/mon_user/test/ -type f -exec echo {} \+</code> |
<note warning> | <note warning> | ||
Ligne 157: | Ligne 176: | ||
Voici par exemple comment on peut compter le nombre de lignes de chaque fichier de code Python de ce site: | Voici par exemple comment on peut compter le nombre de lignes de chaque fichier de code Python de ce site: | ||
- | + | <code bash> | |
- | find developpement/django/certif -name '*.py' -exec wc -l {} \; | + | find developpement/django/certif -name '*.py' -exec wc -l {} \;</code> |
+ | <code> | ||
1 developpement/django/certif/__init__.py | 1 developpement/django/certif/__init__.py | ||
0 developpement/django/certif/acronym/__init__.py | 0 developpement/django/certif/acronym/__init__.py | ||
Ligne 165: | Ligne 185: | ||
13 developpement/django/certif/acronym/urls.py | 13 developpement/django/certif/acronym/urls.py | ||
42 developpement/django/certif/acronym/views.py | 42 developpement/django/certif/acronym/views.py | ||
- | .../... | + | .../...</code> |
- Ici la commande **find** est utilisée avec l'option ''-name'' pour ne sélectionner que les fichiers se terminant par "''.py''" (extension de Python). | - Ici la commande **find** est utilisée avec l'option ''-name'' pour ne sélectionner que les fichiers se terminant par "''.py''" (extension de Python). | ||
Ligne 173: | Ligne 193: | ||
Comme d'habitude vous avez aussi le : | Comme d'habitude vous avez aussi le : | ||
- | $ man find | + | <code bash> |
+ | man find</code> | ||
//Entièrement disponible à votre curiosité !// ;-) | //Entièrement disponible à votre curiosité !// ;-) | ||
Ligne 181: | Ligne 202: | ||
==== Préparation du terrain ==== | ==== Préparation du terrain ==== | ||
- | Placez-vous dans un nouveau dossier créé pour l'occasion. Exemple : | + | Placez-vous dans un nouveau dossier créé pour l'occasion. \\ |
+ | Exemple : | ||
<code bash> | <code bash> | ||
- | $ cd | + | cd |
- | ~$ mkdir -p tmp/df_tp01/ | + | mkdir -p ~/tmp/df_tp01/ |
- | ~$ cd tmp/df_tp01/ | + | cd ~/tmp/df_tp01/ |
- | ~/tmp/df_tp01$ | + | |
</code> | </code> | ||
Ligne 192: | Ligne 213: | ||
suite ainsi : | suite ainsi : | ||
<code bash> | <code bash> | ||
- | ~/tmp/df_tp01$ for i in $(seq 5); do mkdir toctoc$i; done | + | for i in $(seq 5); do mkdir toctoc$i; done |
- | ~/tmp/df_tp01$ mkdir -p toctoc1/paf toctoc2/paf toctoc3/pif/paf toctoc4/paf/paf | + | mkdir -p toctoc1/paf toctoc2/paf toctoc3/pif/paf toctoc4/paf/paf |
- | ~/tmp/df_tp01$ touch toctoc5/paf | + | touch toctoc5/paf |
- | ~/tmp/df_tp01$ for i in $(seq 4); do for j in toctoc*; do mkdir -p $j/tchac$RANDOM; done; done | + | for i in $(seq 4); do for j in toctoc*; do mkdir -p $j/tchac$RANDOM; done; done |
</code> | </code> | ||
Ligne 298: | Ligne 319: | ||
Placez-vous dans un nouveau dossier créé pour l'occasion. Exemple : | Placez-vous dans un nouveau dossier créé pour l'occasion. Exemple : | ||
<code bash> | <code bash> | ||
- | $ cd | + | cd |
- | ~$ mkdir -p tmp/df_tp01/ | + | mkdir -p tmp/df_tp01/ |
- | ~$ cd tmp/df_tp01/ | + | cd tmp/df_tp01/ |
- | ~/tmp/df_tp01$ | + | |
</code> | </code> | ||
Ligne 309: | Ligne 329: | ||
Voici pour la première partie : | Voici pour la première partie : | ||
<code bash> | <code bash> | ||
- | ~/tmp/df_tp01$ touch phaute_dorthografe | + | touch phaute_dorthografe |
- | ~/tmp/df_tp01$ touch notes_temporaires | + | touch notes_temporaires |
~/tmp/df_tp01$ touch quisuisje | ~/tmp/df_tp01$ touch quisuisje | ||
- | ~/tmp/df_tp01$ | ||
</code> | </code> | ||
Ligne 436: | Ligne 455: | ||
<code bash> | <code bash> | ||
- | ~/tmp/df_tp01$ find . | + | find . |
</code> | </code> | ||
On va se concentrer sur les répertoires ''paf'' : | On va se concentrer sur les répertoires ''paf'' : | ||
<code bash> | <code bash> | ||
- | ~/tmp/df_tp01$ find . -type d -name paf | + | find . -type d -name paf</code> |
+ | <code> | ||
./toctoc3/pif/paf | ./toctoc3/pif/paf | ||
./toctoc1/paf | ./toctoc1/paf | ||
Ligne 451: | Ligne 471: | ||
Pour afficher les sous-dossiers en premier, on ajoute l'option ''-depth'' **au début** de la commande | Pour afficher les sous-dossiers en premier, on ajoute l'option ''-depth'' **au début** de la commande | ||
<code bash> | <code bash> | ||
- | ~/tmp/df_tp01$ find . -depth -type d -name paf | + | find . -depth -type d -name paf</code> |
+ | <code> | ||
./toctoc3/pif/paf | ./toctoc3/pif/paf | ||
./toctoc1/paf | ./toctoc1/paf | ||
Ligne 465: | Ligne 486: | ||
<code bash> | <code bash> | ||
- | ~/tmp/df_tp01$ find . -depth -type d -name paf -exec pwd \; | + | find . -depth -type d -name paf -exec pwd \;</code> |
+ | <code> | ||
/home/captnfab/tmp/df_tp01 | /home/captnfab/tmp/df_tp01 | ||
/home/captnfab/tmp/df_tp01 | /home/captnfab/tmp/df_tp01 | ||
Ligne 476: | Ligne 498: | ||
<code bash> | <code bash> | ||
- | ~/tmp/df_tp01$ find . -depth -type d -name paf -execdir pwd \; | + | find . -depth -type d -name paf -execdir pwd \;</code> |
+ | <code> | ||
/home/captnfab/tmp/df_tp01/toctoc3/pif | /home/captnfab/tmp/df_tp01/toctoc3/pif | ||
/home/captnfab/tmp/df_tp01/toctoc1 | /home/captnfab/tmp/df_tp01/toctoc1 | ||
Ligne 493: | Ligne 516: | ||
<code bash> | <code bash> | ||
- | ~/tmp/df_tp01$ find . -depth -type d -name paf -execdir mv paf ploum \; | + | find . -depth -type d -name paf -execdir mv paf ploum \; |
</code> | </code> | ||
Ligne 500: | Ligne 522: | ||
<code bash> | <code bash> | ||
- | ~/tmp/df_tp01$ find . -depth -type d -name ploum | + | find . -depth -type d -name ploum |
</code> | </code> | ||
Ligne 522: | Ligne 544: | ||
//Merci à //**adrien**// sur le chan //#slackware-fr// et au //**captnfab**// not' matelot hottentot favori !// :-) | //Merci à //**adrien**// sur le chan //#slackware-fr// et au //**captnfab**// not' matelot hottentot favori !// :-) | ||
- | ===== Effacer le contenu d'un fichiers ===== | + | ==== Effacer le contenu d'un fichiers ==== |
- | Pour effacer le contenu d'un fichier : | + | Pour effacer le contenu d'un fichier |
+ | |||
+ | === le chevron === | ||
+ | |||
+ | Avec [[commande:chevron|la commande chevron]] | ||
<code bash> | <code bash> | ||
find -type f -iname nom_du_fichier -execdir cat {} nom_du_fichier + > nom_du_fichier \;</code> | find -type f -iname nom_du_fichier -execdir cat {} nom_du_fichier + > nom_du_fichier \;</code> | ||
+ | |||
+ | === xargs === | ||
Ou bien avec **xargs** : | Ou bien avec **xargs** : | ||
Ligne 532: | Ligne 560: | ||
find -type f -iname nom_du_fichier | xargs cat > nom_du_fichier \;</code> | find -type f -iname nom_du_fichier | xargs cat > nom_du_fichier \;</code> | ||
- | Ou encore avec la commande **cp** : | + | === cp === |
+ | |||
+ | Ou encore avec [[commande:cp|la commande cp]] : | ||
<code bash> | <code bash> | ||
find -type f -iname nom_du_fichier -exec cp /dev/null {} \;</code> | find -type f -iname nom_du_fichier -exec cp /dev/null {} \;</code> |