logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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 → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 [09/12/2012 05:15]
martin_mtl
doc:systeme:find [17/07/2014 19:09]
smolski
Ligne 1: Ligne 1:
-//Page en cours de modification : 08 déc 12//+====== find ======
  
-====== ​Find ======+  * Objet : find 
 +  * Niveau requis : {{tag>​avisé}} 
 +  * Commentaires : //Recherche de fichiers. // 
 +  * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-) 
 +  * Suivi : {{tag>​en-chantier à-tester à-placer}} - FIXME Pour choisir, voir les autres Tags possibles dans [[:​atelier:#​tags|l'​Atelier]]. 
 +    * Création par [[user>​smolski]] <​date>​ 
 +    * Testé par [[user>​smolski]] 26-08-2013 
 +  * Commentaires sur le forum : [[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 !)) 
 + 
 +**Nota :** 
 + 
 +Contributeurs,​ les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! 
 + 
 +===== Introduction ​===== 
 + 
 +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 user>
 +find / -name '​messages'</​code>​
  
-    portable:/​home/​mattux # find / -name '​messages'​ +<file bash résultat de la commande précédente> ​ 
-    /​var/​log/​messages +/​var/​log/​messages</file>
-    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 =====
  
-''​-atime +n (ou -n)'' ​ trouve les fichiers auxquels on a accédé il y a plus de n jours (ou moins de n jours) +^  Options ​ ^  Fonctions ​ ^ 
- +|-atime +n (ou -n)  ​|//trouve les fichiers auxquels on a accédé il y a plus de n jours (ou moins de n jours)//  | 
-''​-mtime +n (ou -n)'' ​ trouve les fichiers modifiés il y a plus de n jours (ou moins de n jours) +|-mtime +n (ou -n)  ​|//trouve les fichiers modifiés il y a plus de n jours (ou moins de n jours) ​ | 
- +|-maxdepth n  |définit le niveau maximum de sous-répertoire à explorer//  | 
-''​-maxdepth n'' ​       # définit le niveau maximum de sous-répertoire à explorer +|-type l ou d ou f  ​|//indique le type de fichier à rechercher (l pour lien symbolique, d pour répertoire ​(directory), f pour fichier)//  | 
- +|-name ​ |//​recherche par motif en respectant la casse// ​ | 
-''​-type l ou d ou f'' ​ indique le type de fichier à rechercher (l pour lien symbolique, d pour répertoire,​ f pour fichier) ​          ​+|-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 user> 
-  ​$ ​find / -name '​note'​+find / -name '​note'​</​code>​
  
 Décomposition de la commande de l'​exemple : Décomposition de la commande de l'​exemple :
Ligne 39: Ligne 56:
   - "''​-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 : 
- +<file bash résultat de la commande précédente> ​ 
-   ​/​home/​martin/​note+/​home/​martin/​note</​file>​
  
 Si l'on n'est pas sûr de la "​casse"​ (Majuscule ou Minuscule) on utilise l'​option ''​-iname''​. Si l'on n'est pas sûr de la "​casse"​ (Majuscule ou Minuscule) on utilise l'​option ''​-iname''​.
Ligne 50: Ligne 67:
  
 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 user> 
-  $find /​home/​martin -name '​note*'​+find /​home/​martin -name '​note*'​</​code>​
  
 ===== Recherche par nom simple & multiple ===== ===== Recherche par nom simple & multiple =====
Ligne 57: Ligne 74:
 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 [[:​doc:​systeme:​su|root]] pour avoir accès à tous les répertoires. 
- +<code user> 
-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 68: Ligne 85:
  
 La réponse : La réponse :
 +<file bash résultat de la commande précédente> ​
   /​media/​homebis/​martin/​textes/​mes_archives/​Baseball/​archives   /​media/​homebis/​martin/​textes/​mes_archives/​Baseball/​archives
   /​media/​homebis/​martin/​archives   /​media/​homebis/​martin/​archives
Ligne 73: Ligne 91:
   /​media/​homebis/​Documents_gr/​archives   /​media/​homebis/​Documents_gr/​archives
   /​media/​homebis/​Documents_gr/​mes_fichiers/​archives   /​media/​homebis/​Documents_gr/​mes_fichiers/​archives
 +</​file>​
  
-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 user> 
 +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 user> 
 +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 : [[:​doc:​programmation:​shell:​regexp]])). La commande deviendrait donc : 
 +<code user> 
 +find -type f -name "​*.mp?"​ -o -name "​*.ogg"</​code>​
  
-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 +===== Rechercher pour supprimer ===== 
-  find -type f -name "*.mp?" --name "*.ogg"+ 
 +Un fonction intéressante de //find// est de supprimer en lot les fichiers trouvés. 
 + 
 +Il n'est point rare de télécharger ou d'installer de nombreux ​fichiers ​qui ne nous servent plus, mais devant ​le travail pénible de devoir supprimer tous ces fichiers, on repousse au lendemain cette charge. Heureusement grâce à la fonction -delete de find, c'​est ​un pur bonheur. 
 + 
 +==== Paramètre -delete ==== 
 + 
 +Exemple, si dans votre home ou autre dossier vous avez beaucoup de fichier .tar.gz qui ne vous servent plus à rien. Il suffit de lancer la commande ​suivante ​
 +<code user>find -iname "*.tar.gz" -delete</​code>​ 
 + 
 +<note important>​**Attention,​ la fonction ​-delete ne vous demande pas de confirmation**</​note>​ 
 + 
 +=== Supprimer avec demande de confirmation === 
 + 
 +Pour une demande de confirmation avant suppression de chaque fichier "​.tar.gz"​ trouvés : 
 +<code user>​find -iname ​"*.tar.gz" ​-ok rm {} \;</​code>​ 
 +Merci à [[http://​debian-facile.org/​viewtopic.php?​pid=67484#​p67484|MicP]] pour cette trouvaille :)
  
 ===== Filtrer en fonction des droits ===== ===== Filtrer en fonction des droits =====
Ligne 101: Ligne 144:
 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>​ +<​code ​user
-find /bin -perm /5000 -user root+find /bin -perm /5000 -user root</​code>​ 
 +<file bash résultat de la commande précédente>​
 /bin/su /bin/su
 /bin/mount /bin/mount
Ligne 108: Ligne 152:
 /bin/ping /bin/ping
 /bin/ping6 /bin/ping6
-</code>+</file>
  
 Cette option est intéressante pour la sécurité. Les fichiers listés dans la commande précédente sont tous exécuté avec les droits ''​root''​. Cette option est intéressante pour la sécurité. Les fichiers listés dans la commande précédente sont tous exécuté avec les droits ''​root''​.
Ligne 114: Ligne 158:
 ===== Recherche par motif ===== ===== Recherche par motif =====
  
-Pour rechercher un motif, il faut utiliser la même option, et utiliser les [[commande:regexp | REGEXP]].+Pour rechercher un motif, il faut utiliser la même option, et utiliser les [[:​doc:​programmation:​shell:regexp | REGEXP]].
  
 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>​ +<​code ​user
-find . -name '​*.java'​+find . -name '​*.java'​</​code>​ 
 +<file bash résultat de la commande précédente> ​
 ./​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 126: Ligne 171:
 ./​java/​jdk1.5.0_06/​demo/​applets/​CardTest/​CardTest.java ./​java/​jdk1.5.0_06/​demo/​applets/​CardTest/​CardTest.java
 ... ...
 +</​file>​
 +
 +===== Rechercher les fichiers n'​appartenant pas à l'​utilisateur =====
 +
 +Il peut parfois être utile de rechercher les fichiers n'​appartenant pas à l'​utilisateur,​ en vue de corriger un problème rencontré avec une application (par exemple, un fichier peut appartenir à root au lieu d'​appartenir à l'​utilisateur ; ce dernier risque de ne pas avoir de droits dessus, ce que peut alors provoquer une erreur dans une application cherchant à modifier le dit fichier).
 +
 +Pour ce faire, il suffit d'​exécuter là commande suivante, où « utilisateur » est à remplacer par votre nom d'​utilisateur :
 +
 +<code user>
 +find /​home/​utilisateur ! -user utilisateur
 +</​code>​
 +
 +ou bien, en utilisant des variables :
 +
 +<code user>
 +find $HOME ! -user $USER
 +</​code>​
 +
 +Pour avoir davantage d'​informations sur les fichiers ainsi trouvés, vous pouvez ajouter l'​option ''​ls''​ :
 +
 +<code user>
 +find $HOME ! -user $USER -ls
 </​code>​ </​code>​
  
Ligne 132: Ligne 199:
 La commande **find** permet d'​effectuer toute sorte d'​action avec les fichiers trouvés. La commande **find** permet d'​effectuer toute sorte d'​action avec les fichiers trouvés.
  
-Une action très utile est "''​-exec''"​ qui permet d'​exécuter une commande sur les fichiers sélectionnés. +Une action très utile est "''​-exec''"​ qui permet d'​exécuter une commande sur les fichiers sélectionnés. ​\\
 La syntaxe de ''​exec''​ est particulière car il faut pouvoir fournir le nom du fichier trouvé. La syntaxe de ''​exec''​ est particulière car il faut pouvoir fournir le nom du fichier trouvé.
  
Ligne 145: Ligne 211:
  
 Par exemple ainsi : Par exemple ainsi :
- +<code user> 
-   $ find /​home/​mon_user/​test/​ -type f -exec echo {} \++find /​home/​mon_user/​test/​ -type f -exec echo {} \+</​code>​
  
 <note warning> <note warning>
Ligne 158: Ligne 224:
  
 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 user> 
-   find developpement/​django/​certif -name '​*.py'​ -exec wc -l {} \;+   find developpement/​django/​certif -name '​*.py'​ -exec wc -l {} \;</​code>​ 
 +<file bash résultat de la commande précédente> ​
        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 166: Ligne 233:
       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
-      .../...+      .../...</​file>​
  
   - 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 174: Ligne 241:
  
 Comme d'​habitude vous avez aussi le : Comme d'​habitude vous avez aussi le :
-   ​$ ​man find+<code user> 
 +man find</​code>​
  
 //​Entièrement disponible à votre curiosité !// ;-) //​Entièrement disponible à votre curiosité !// ;-)
Ligne 182: Ligne 250:
 ==== 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. ​\\ 
-<​code ​bash+Exemple : 
-cd +<​code ​user
-~$ mkdir -p tmp/​df_tp01/​ +cd 
-~$ cd tmp/​df_tp01/​ +mkdir -p ~/tmp/​df_tp01/​ 
-~/​tmp/​df_tp01$+cd ~/​tmp/​df_tp01/
 </​code>​ </​code>​
  
 On va maintenant créer les fichiers et dossiers qui nous servirons pour la On va maintenant créer les fichiers et dossiers qui nous servirons pour la
 suite ainsi : suite ainsi :
-<​code ​bash+<​code ​user
-~/​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 203: Ligne 271:
 À maîtriser absolument avant de poursuivre. À maîtriser absolument avant de poursuivre.
  
-  * [[manuel:repertoire ​| Différents types de chemin — Notion de répertoire de travail]] - Pas à pas. +  * [[:doc:​programmation:​shell:​repertoires ​| Différents types de chemin — Notion de répertoire de travail]] - Pas à pas.
- +
  
 ===== Find, -exec et -execdir ===== ===== Find, -exec et -execdir =====
Ligne 217: Ligne 283:
 Si vous lancez un ''​find''​ depuis le second répertoire de ce TP, vous allez voir ce sacré bazar : Si vous lancez un ''​find''​ depuis le second répertoire de ce TP, vous allez voir ce sacré bazar :
  
-<​code ​bash>+<​code ​user>
 ~/​tmp/​df_tp01$ find . ~/​tmp/​df_tp01$ find .
 </​code>​ </​code>​
  
 Par exemple, on va se concentrer sur les répertoires nommés ''​paf''​ : Par exemple, on va se concentrer sur les répertoires nommés ''​paf''​ :
-<​code ​bash+<​code ​user
-~/​tmp/​df_tp01$ find . -type d -name paf+~/​tmp/​df_tp01$ find . -type d -name paf</​code>​ 
 +<file bash résultat de la commande précédente> ​
 ./​toctoc3/​pif/​paf ./​toctoc3/​pif/​paf
 ./​toctoc1/​paf ./​toctoc1/​paf
Ligne 229: Ligne 296:
 ./​toctoc4/​paf/​paf ./​toctoc4/​paf/​paf
 ./​toctoc2/​paf ./​toctoc2/​paf
-</code>+</file>
  
 === Nota : === === Nota : ===
  
 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 ​user
-~/​tmp/​df_tp01$ find . -depth -type d -name paf+~/​tmp/​df_tp01$ find . -depth -type d -name paf</​code>​ 
 +<file bash résultat de la commande précédente> ​
 ./​toctoc3/​pif/​paf ./​toctoc3/​pif/​paf
 ./​toctoc1/​paf ./​toctoc1/​paf
Ligne 241: Ligne 309:
 ./​toctoc4/​paf ./​toctoc4/​paf
 ./​toctoc2/​paf ./​toctoc2/​paf
-</code>+</file>
  
 ==== Répertoires de travail pour -exec et -execdir ==== ==== Répertoires de travail pour -exec et -execdir ====
Ligne 248: Ligne 316:
  
 Affichons le répertoire de travail : Affichons le répertoire de travail :
-<​code ​bash+<​code ​user
-~/​tmp/​df_tp01$ find . -depth -type d -name paf -exec pwd \;+~/​tmp/​df_tp01$ find . -depth -type d -name paf -exec pwd \;</​code>​ 
 +<file bash résultat de la commande précédente> ​
 /​home/​captnfab/​tmp/​df_tp01 /​home/​captnfab/​tmp/​df_tp01
 /​home/​captnfab/​tmp/​df_tp01 /​home/​captnfab/​tmp/​df_tp01
Ligne 255: Ligne 324:
 /​home/​captnfab/​tmp/​df_tp01 /​home/​captnfab/​tmp/​df_tp01
 /​home/​captnfab/​tmp/​df_tp01 /​home/​captnfab/​tmp/​df_tp01
-</code>+</file>
  
-On voit qu'​ici,​ pour chaque dossier ''​paf''​ de trouvé, c'est seulement __le chemin du répertoire d'où nous lançons notre commande find__, qui est indiqué par l'​exécution de [[commande:pwd | la commande : pwd]], ce qui n'est pas ce que nous voulons obtenir. 8-o+On voit qu'​ici,​ pour chaque dossier ''​paf''​ de trouvé, c'est seulement __le chemin du répertoire d'où nous lançons notre commande find__, qui est indiqué par l'​exécution de [[:​doc:​systeme:pwd | la commande : pwd]], ce qui n'est pas ce que nous voulons obtenir. 8-o
  
 Employons ''​-execdir''​ maintenant : Employons ''​-execdir''​ maintenant :
-<​code ​bash+<​code ​user
-~/​tmp/​df_tp01$ find . -depth -type d -name paf -execdir pwd \;+~/​tmp/​df_tp01$ find . -depth -type d -name paf -execdir pwd \;</​code>​ 
 +<file bash résultat de la commande précédente> ​
 /​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 267: Ligne 337:
 /​home/​captnfab/​tmp/​df_tp01/​toctoc4 /​home/​captnfab/​tmp/​df_tp01/​toctoc4
 /​home/​captnfab/​tmp/​df_tp01/​toctoc2 /​home/​captnfab/​tmp/​df_tp01/​toctoc2
-</code>+</file>
  
 On voit maintenant que nous obtenons bien __le chemin de chaque répertoire contenant le dossier ''​paf''​__ qui est indiqué par l'​exécution de pwd, ce qui était recherché. :-D On voit maintenant que nous obtenons bien __le chemin de chaque répertoire contenant le dossier ''​paf''​__ qui est indiqué par l'​exécution de pwd, ce qui était recherché. :-D
Ligne 277: Ligne 347:
  
 C'est on ne peut plus simple : C'est on ne peut plus simple :
-<​code ​bash>+<​code ​user>
 ~/​tmp/​df_tp01$ find . -depth -type d -name paf -execdir mv paf ploum \; ~/​tmp/​df_tp01$ find . -depth -type d -name paf -execdir mv paf ploum \;
 </​code>​ </​code>​
  
 Vous pouvez vérifier que ça a bien marché avec la commande suivante : Vous pouvez vérifier que ça a bien marché avec la commande suivante :
-<​code ​bash>+<​code ​user>
 ~/​tmp/​df_tp01$ find . -depth -type d -name ploum ~/​tmp/​df_tp01$ find . -depth -type d -name ploum
 </​code>​ </​code>​
Ligne 291: Ligne 361:
 Site de ce matelot bienveillant d'où est totalement pompé cet exercice : Site de ce matelot bienveillant d'où est totalement pompé cet exercice :
   * http://​wiki.chezlefab.net/​tuto_nix/​tp/​find_01   * http://​wiki.chezlefab.net/​tuto_nix/​tp/​find_01
- 
  
 ===== Une seconde version plus scolaire du TP01 ===== ===== Une seconde version plus scolaire du TP01 =====
Ligne 298: Ligne 367:
  
 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 ​user
-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 377:
  
 Voici pour la première partie : Voici pour la première partie :
-<​code ​bash+<​code ​user
-~/​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>​
  
 Et pour la seconde : Et pour la seconde :
-<​code ​bash>+<​code ​user>
 ~/​tmp/​df_tp01$ for i in $(seq 5); do mkdir toctoc$i; done ~/​tmp/​df_tp01$ 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 ~/​tmp/​df_tp01$ mkdir -p toctoc1/paf toctoc2/paf toctoc3/​pif/​paf toctoc4/​paf/​paf
Ligne 331: Ligne 398:
 l'​afficher en tapant la commande ''​pwd''​. l'​afficher en tapant la commande ''​pwd''​.
  
-<​code ​bash+<​code ​user
-~/​tmp/​df_tp01$ pwd+~/​tmp/​df_tp01$ pwd</​code>​ 
 +<file bash résultat de la commande précédente> ​
 /​home/​captnfab/​tmp/​df_tp01 /​home/​captnfab/​tmp/​df_tp01
 ~/​tmp/​df_tp01$ ~/​tmp/​df_tp01$
-</code>+</file>
  
 On change de répertoire de travail avec la commande ''​cd''​. On change de répertoire de travail avec la commande ''​cd''​.
  
 Le répertoire de travail est également stocké dans la variable ''​$PWD''​ du shell. Le répertoire de travail est également stocké dans la variable ''​$PWD''​ du shell.
-<​code ​bash+<​code ​user
-~/​tmp/​df_tp01$ echo $PWD+~/​tmp/​df_tp01$ echo $PWD</​code>​ 
 +<file bash résultat de la commande précédente> ​
 /​home/​captnfab/​tmp/​df_tp01 /​home/​captnfab/​tmp/​df_tp01
 ~/​tmp/​df_tp01$ ~/​tmp/​df_tp01$
-</code>+</file>
  
 ==== Chemin relatif / chemin absolu ==== ==== Chemin relatif / chemin absolu ====
Ligne 386: Ligne 455:
 **Attention** : Virtuellement,​ un chemin relatif commence **toujours** par **Attention** : Virtuellement,​ un chemin relatif commence **toujours** par
 ''​./''​. Cependant, en règle générale, on peut l'​omettre. ​ Exemple ''​./''​. Cependant, en règle générale, on peut l'​omettre. ​ Exemple
-<​code ​bash>+<​code ​user>
 ls -lh quisuisje ls -lh quisuisje
 </​code>​ </​code>​
  
 Signifie en fait : Signifie en fait :
-<​code ​bash>+<​code ​user>
 ls -lh ./quisuisje ls -lh ./quisuisje
 </​code>​ </​code>​
Ligne 408: Ligne 477:
 Exemples : Exemples :
   * Avec deux chemins relatifs   * Avec deux chemins relatifs
-<​code ​bash>+<​code ​user>
 ~/​tmp/​df_tp01/​$ mv ./​phaute_dorthografe ./​faute_dorthographe ~/​tmp/​df_tp01/​$ mv ./​phaute_dorthografe ./​faute_dorthographe
 </​code>​ </​code>​
 qui signifie donc qui signifie donc
-<​code ​bash>+<​code ​user>
 mv $PWD/​./​phaute_dorthografe $PWD/​./​faute_dorthographe mv $PWD/​./​phaute_dorthografe $PWD/​./​faute_dorthographe
 </​code>​ </​code>​
  
   * Avec un chemin relatif et un chemin absolu   * Avec un chemin relatif et un chemin absolu
-<​code ​bash>+<​code ​user>
 ~/​tmp/​df_tp01/​$ mv ./​notes_temporaires /​tmp/​notes_temporaires.txt ~/​tmp/​df_tp01/​$ mv ./​notes_temporaires /​tmp/​notes_temporaires.txt
 </​code>​ </​code>​
 qui signifie qui signifie
-<​code ​bash>+<​code ​user>
 ~/​tmp/​df_tp01/​$ mv $PWD/​./​notes_temporaires /​tmp/​notes_temporaires.txt ~/​tmp/​df_tp01/​$ mv $PWD/​./​notes_temporaires /​tmp/​notes_temporaires.txt
 </​code>​ </​code>​
Ligne 436: Ligne 505:
 Si vous lancez un ''​find''​ depuis le répertoire du tp, vous allez voir un sacré bazar : Si vous lancez un ''​find''​ depuis le répertoire du tp, vous allez voir un sacré bazar :
  
-<​code ​bash+<​code ​user
-~/​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 ​user
-~/​tmp/​df_tp01$ ​find . -type d -name paf+find . -type d -name paf</​code>​ 
 +<file bash résultat de la commande précédente> ​
 ./​toctoc3/​pif/​paf ./​toctoc3/​pif/​paf
 ./​toctoc1/​paf ./​toctoc1/​paf
Ligne 448: Ligne 518:
 ./​toctoc4/​paf/​paf ./​toctoc4/​paf/​paf
 ./​toctoc2/​paf ./​toctoc2/​paf
-</code>+</file>
  
 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 ​user
-~/​tmp/​df_tp01$ ​find . -depth -type d -name paf+find . -depth -type d -name paf</​code>​ 
 +<file bash résultat de la commande précédente> ​
 ./​toctoc3/​pif/​paf ./​toctoc3/​pif/​paf
 ./​toctoc1/​paf ./​toctoc1/​paf
Ligne 458: Ligne 529:
 ./​toctoc4/​paf ./​toctoc4/​paf
 ./​toctoc2/​paf ./​toctoc2/​paf
-</code>+</file>
  
 ==== Répertoires de travail pour -exec et -execdir ==== ==== Répertoires de travail pour -exec et -execdir ====
Ligne 465: Ligne 536:
 répertoire de travail. répertoire de travail.
  
-<​code ​bash+<​code ​user
-~/​tmp/​df_tp01$ ​find . -depth -type d -name paf -exec pwd \;+find . -depth -type d -name paf -exec pwd \;</​code>​ 
 +<file bash résultat de la commande précédente> ​
 /​home/​captnfab/​tmp/​df_tp01 /​home/​captnfab/​tmp/​df_tp01
 /​home/​captnfab/​tmp/​df_tp01 /​home/​captnfab/​tmp/​df_tp01
Ligne 472: Ligne 544:
 /​home/​captnfab/​tmp/​df_tp01 /​home/​captnfab/​tmp/​df_tp01
 /​home/​captnfab/​tmp/​df_tp01 /​home/​captnfab/​tmp/​df_tp01
-</code>+</file>
  
 Comparons avec ''​-execdir''​ Comparons avec ''​-execdir''​
  
 <code bash> <code bash>
-~/​tmp/​df_tp01$ ​find . -depth -type d -name paf -execdir pwd \;+find . -depth -type d -name paf -execdir pwd \;</​code>​ 
 +<file bash résultat de la commande précédente> ​
 /​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 483: Ligne 556:
 /​home/​captnfab/​tmp/​df_tp01/​toctoc4 /​home/​captnfab/​tmp/​df_tp01/​toctoc4
 /​home/​captnfab/​tmp/​df_tp01/​toctoc2 /​home/​captnfab/​tmp/​df_tp01/​toctoc2
-</code>+</file>
  
 On voit ici que le répertoire de travail est à chaque fois le répertoire contenant le dossier ''​pif''​. On voit ici que le répertoire de travail est à chaque fois le répertoire contenant le dossier ''​pif''​.
Ligne 493: Ligne 566:
 C'est on ne peut plus simple : C'est on ne peut plus simple :
  
-<​code ​bash+<​code ​user
-~/​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>​
  
 Vous pouvez vérifier que ça a bien marché avec la commande suivante : Vous pouvez vérifier que ça a bien marché avec la commande suivante :
  
-<​code ​bash+<​code ​user
-~/​tmp/​df_tp01$ ​find . -depth -type d -name ploum+find . -depth -type d -name ploum
 </​code>​ </​code>​
  
Ligne 512: Ligne 584:
  
 On se place à la racine du répertoire cible : On se place à la racine du répertoire cible :
-<​code ​bash>+<​code ​user>
 cd /​repertoire/​machin</​code>​ cd /​repertoire/​machin</​code>​
  
 et on tape : et on tape :
-<​code ​bash>+<​code ​user>
 find . -depth -type f -exec sed -i '​s/​require(/​@require_once(/​g'​ {} \;</​code>​ find . -depth -type f -exec sed -i '​s/​require(/​@require_once(/​g'​ {} \;</​code>​
  
Ligne 523: Ligne 595:
 //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 
-<​code ​bash>+ 
 +=== le chevron === 
 + 
 +Avec [[:​doc:​programmation:​shell:chevrons|la commande chevron]] 
 +<​code ​user>
 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** :
-<​code ​bash>+<​code ​user>
 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 === 
-<​code ​bash>+ 
 +Ou encore avec [[:​doc:​systeme:​cp|la commande cp]] 
 +<​code ​user>
 find -type f -iname nom_du_fichier -exec cp /dev/null {} \;</​code>​ find -type f -iname nom_du_fichier -exec cp /dev/null {} \;</​code>​
  
doc/systeme/find.txt · Dernière modification: 24/10/2022 18:38 par Jean-Pierre Pinson

Pied de page des forums

Propulsé par FluxBB