Qanuq - md5http://www.qanuq.com/2021-12-07T14:17:25+01:00SysAdmin et DéveloppementCalculer la somme de contrôle MD5 sur une arborescence entière2013-05-06T00:00:00+02:002021-12-07T14:17:25+01:00Matthieu Petiottag:www.qanuq.com,2013-05-06:/2013/05/06/calculer-la-somme-de-controle-md5-sur-une-arborescence-entiere/<p>Voici comment vérifier l’intégrité d’une arborescence de fichiers.</p><p>Lorsque l’on effectue des transferts d’une machine à une autre, il peut arriver
que des erreurs se produisent. Voici une technique permettant de vérifier que
les fichiers transférés sont bien conformes aux originaux. On utilise pour cela
l’algorithme <a href="https://fr.wikipedia.org/wiki/MD5">Message Digest 5</a> qui permet de calculer une somme à partir
d’un fichier. Si un seul octet venait à changer dans ce fichier, alors la somme
de contrôle serait complètement différente. Il existe d’autres algorithmes de
hachage, comme <a href="https://fr.wikipedia.org/wiki/SHA-1"><span class="caps">SHA</span>-1</a>, <a href="https://fr.wikipedia.org/wiki/SHA-1"><span class="caps">SHA</span>-2</a>, etc. Pour les utiliser, il suffira
d’utiliser une autre commande que md5sum.</p>
<h2 id="generer-la-somme-md5-dun-fichier"><a class="toclink" href="#generer-la-somme-md5-dun-fichier">Générer la somme <span class="caps">MD5</span> d’un fichier</a></h2>
<p>Pour calculer une somme de contrôle sur un fichier, il suffit de faire, sous
<span class="caps">GNU</span> Linux :</p>
<div class="highlight"><pre><span></span><code>md5sum mon_image.png > SUM
</code></pre></div>
<p>On pourra ensuite vérifier que le fichier n’a pas été altéré via la commande :</p>
<div class="highlight"><pre><span></span><code>md5sum -c SUM
</code></pre></div>
<h2 id="generer-la-somme-md5-dune-arborescence"><a class="toclink" href="#generer-la-somme-md5-dune-arborescence">Générer la somme <span class="caps">MD5</span> d’une arborescence</a></h2>
<p>Dans certains cas, on a besoin de vérifier toute une arborescence de fichiers.
Voici comment faire :</p>
<div class="highlight"><pre><span></span><code>find /home/moi/mon_repertoire -type f -print0 <span class="p">|</span> xargs -0 md5sum > SUM
</code></pre></div>
<p>La commande find va trouver tous les fichiers (option -type f) et la commande
md5sum va alors calculer la somme de contrôle de chacun des fichiers reçus en paramètre.</p>
<p>Pour vérifier l’arborescence, on fera comme précédemment :</p>
<div class="highlight"><pre><span></span><code>md5sum -c SUM
</code></pre></div>Exploitez la puissance de la commande find2013-03-31T00:00:00+01:002021-12-07T14:17:25+01:00Matthieu Petiottag:www.qanuq.com,2013-03-31:/2013/03/31/exploitez-la-puissance-de-la-commande-find/<p>Voici comment utiliser la command find pour trouver des fichiers.</p><div class="toc">
<ul>
<li><a href="#trouver-des-fichiers-grace-a-la-commande-find">Trouver des fichiers grâce à la commande find</a><ul>
<li><a href="#les-bases">Les bases</a><ul>
<li><a href="#recherche-par-nom">Recherche par nom</a></li>
<li><a href="#recherche-par-utilisateur-et-groupe">Recherche par utilisateur et groupe</a></li>
<li><a href="#recherche-par-type">Recherche par type</a></li>
<li><a href="#lister-les-fichiers-vides">Lister les fichiers vides</a></li>
<li><a href="#recherche-par-taille-de-fichier">Recherche par taille de fichier</a></li>
</ul>
</li>
<li><a href="#combiner-les-options">Combiner les options</a></li>
<li><a href="#options-avancees">Options avancées</a><ul>
<li><a href="#recherche-par-date-de-derniere-modification-du-contenu">Recherche par date de dernière modification du contenu</a></li>
<li><a href="#options-relatives-aux-dates">Options relatives aux dates</a></li>
<li><a href="#recherche-par-permission">Recherche par permission</a></li>
<li><a href="#identification-des-fichiers-orphelins">Identification des fichiers orphelins</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#effectuer-des-operations-sur-les-fichiers-trouves">Effectuer des opérations sur les fichiers trouvés</a></li>
<li><a href="#astuces">Astuces</a><ul>
<li><a href="#ne-pas-afficher-les-messages-derreur">Ne pas afficher les messages d’erreur</a></li>
<li><a href="#ignorer-des-dossiers">Ignorer des dossiers</a></li>
<li><a href="#limiter-la-profondeur-daction">Limiter la profondeur d’action</a></li>
<li><a href="#affichage-personnalise">Affichage personnalisé</a></li>
</ul>
</li>
<li><a href="#conclusion">Conclusion</a></li>
</ul>
</div>
<p>Les système Unix/Linux possèdent un grand nombre de commandes permettant
d’effectuer les tâches d’administration de tous les jours… La commande find
est une de celles-là. Elle sait faire bien plus que chercher des fichiers. La
commande find permet de trouver tous les fichiers mp3, tous les fichiers d’un
utilisateur donné, tous les fichiers exécutables, tous les fichiers modifiés à
une date donnée, etc. En la combinant avec xargs, il est possible d’exécuter
des tâches sur les fichiers trouvés avec un gain de temps assez conséquent.
C’est ce que nous allons voir dans cet article.</p>
<h2 id="trouver-des-fichiers-grace-a-la-commande-find"><a class="toclink" href="#trouver-des-fichiers-grace-a-la-commande-find">Trouver des fichiers grâce à la commande find</a></h2>
<h3 id="les-bases"><a class="toclink" href="#les-bases">Les bases</a></h3>
<div class="highlight"><pre><span></span><code>find où-chercher critères
</code></pre></div>
<p>Le premier argument doit être la liste des répertoires dans lesquels effectuer
la recherche. Il est possible de rechercher dans plusieurs répertoires à la
fois en fournissant plusieurs arguments. La commande find n’entrera pas dans un
répertoire si vous n’avez pas les droits. Voici un premier exemple qui
permettra de trouver tous les fichiers présents dans les dossiers /home/you et /home/me.</p>
<div class="highlight"><pre><span></span><code>find /home/you /home/me
</code></pre></div>
<h4 id="recherche-par-nom"><a class="toclink" href="#recherche-par-nom">Recherche par nom</a></h4>
<p>La recherche par nom se fait grâce à l’option -name. Cette option peut prendre
un nom complet de fichier comme une simple expression contenant * (plusieurs
caractères) et ? (un caractère). Il est par exemple possible, de trouver tous
les fichiers ayant l’extension mp3 dans notre répertoire personnel.</p>
<div class="highlight"><pre><span></span><code>find ~ -name <span class="s2">"*.mp3"</span>
</code></pre></div>
<p>Si certains de nos fichiers ont une extension en majuscule, la commande
précédente ne les trouvera pas. Il est alors plus intéressant d’utiliser
l’option -iname, qui elle, n’est pas sensible à la casse.</p>
<div class="highlight"><pre><span></span><code>find ~ -iname <span class="s2">"*.mp3"</span>
</code></pre></div>
<p>Utiliser les guillemets dans le critère de recherche est une bonne habitude à
prendre car cela permet d’éviter les problèmes avec les caractères génériques
du Shell.</p>
<h4 id="recherche-par-utilisateur-et-groupe"><a class="toclink" href="#recherche-par-utilisateur-et-groupe">Recherche par utilisateur et groupe</a></h4>
<p>Vous souhaitez trouver tous les fichiers d’un utilisateur particulier dans le
dossier /tmp ? Rien de plus facile, il suffit pour cela d’utiliser l’option -user.</p>
<div class="highlight"><pre><span></span><code>find /var/www -user me
</code></pre></div>
<p>On utilise l’option -group pour trouver les fichiers appartenant à un groupe donné.</p>
<div class="highlight"><pre><span></span><code>find /var/www -group users
</code></pre></div>
<h4 id="recherche-par-type"><a class="toclink" href="#recherche-par-type">Recherche par type</a></h4>
<p>Pour trouver un fichier, un dossier, un lien…, il suffit d’utiliser l’option
-type. Voici un exemple permettant de trouver tous les répertoires de notre
répertoire personnel.</p>
<div class="highlight"><pre><span></span><code>find ~ -type d
</code></pre></div>
<p>Voici quelques unes des valeurs utilisables avec cette option :</p>
<ul>
<li>répertoire : d ;</li>
<li>fichier : f ;</li>
<li>lien : l ;</li>
<li>socket : s ;</li>
<li>tube (pipe) : p.</li>
</ul>
<p>Dans les exemples précédents, et dans les suivants certainement aussi, on parle
de fichiers, c’est un abus de langage car sous Linux, tout est fichier. Donc
lorsque l’on ne précise pas le -type à rechercher, la commande find recherchera
des fichiers, des dossiers, des sockets, etc.</p>
<h4 id="lister-les-fichiers-vides"><a class="toclink" href="#lister-les-fichiers-vides">Lister les fichiers vides</a></h4>
<p>C’est tout simple, grâce à l’option -empty.</p>
<div class="highlight"><pre><span></span><code>find / -empty
</code></pre></div>
<h4 id="recherche-par-taille-de-fichier"><a class="toclink" href="#recherche-par-taille-de-fichier">Recherche par taille de fichier</a></h4>
<p>On veut savoir quels sont les fichiers qui sont plus gros que 10 Mo ? Rien de
plus simple, il suffit d’utiliser l’option -size.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># notez le +</span>
find ~ -size +10M
</code></pre></div>
<p>Pour trouver ceux de moins de 10 ko :</p>
<div class="highlight"><pre><span></span><code><span class="c1"># notez le -</span>
find ~ -size -10k
</code></pre></div>
<p>Pour trouver ceux de 10ko exactement (voir note ci-dessous) :</p>
<div class="highlight"><pre><span></span><code><span class="c1"># pas de + ou de -</span>
find ~ -size 10k
</code></pre></div>
<p>Il est possible d’utiliser le suffixe M pour Méga Octets, G pour Giga Octets, c
pour octets. Si vous recherchez les fichiers d’exactement 5k, le résultat
comprendra les fichiers compris entre 4 ko et 5 ko. Il est possible de chercher
un fichier faisant entre 1 Mo et 2 Mo en combinant les options. Cette notion
est abordée dans la partie suivante.</p>
<h3 id="combiner-les-options"><a class="toclink" href="#combiner-les-options">Combiner les options</a></h3>
<p>Les options vues précédemment sont pratiques, mais le seraient encore plus s’il
était possible de les combiner. C’est bien sûr possible. Les combinaisons
peuvent se faire selon les trois opérateurs suivants : <span class="caps">ET</span>, <span class="caps">OU</span> et <span class="caps">NON</span>. Par
défaut, les options sont combinées en tant que <span class="caps">ET</span> -a. Si vous souhaitez
utiliser l’opérateur <span class="caps">OU</span>, il suffit d’utiliser l’option -o, et si vous souhaitez
utiliser la négation, il suffit d’utiliser l’option !.</p>
<p>Ici, on recherche les fichiers qui ont l’extension mp3 et qui appartiennent à
l’utilisateur me.</p>
<div class="highlight"><pre><span></span><code>find /home -type f -a -name <span class="s2">"*.mp3"</span> -a -user me
<span class="c1"># les options sont combinées par défaut en ET, donc pas la peine de les spécifier dans ce cas</span>
find /home -type f -name <span class="s2">"*.mp3"</span> -user me
</code></pre></div>
<p>La même, mais en excluant les fichiers qui ont une taille supérieure à 3 Mo :</p>
<div class="highlight"><pre><span></span><code>find /home -type f -name <span class="s2">"*.mp3"</span> -user me <span class="se">\!</span> -size +3M
</code></pre></div>
<p>Pour modifier la priorité des opérateurs, on pourra utiliser les parenthèses.
Comme les parenthèses ont une signification particulière dans le Shell, il faut
les échapper. L’exemple suivant permet de rechercher les fichiers .jpg ou .png
appartenant à l’utilisateur me.</p>
<div class="highlight"><pre><span></span><code>find . -user me -a <span class="se">\(</span> -iname <span class="s2">".jpg"</span> -o -iname <span class="s2">".png"</span> <span class="se">\)</span>
</code></pre></div>
<h3 id="options-avancees"><a class="toclink" href="#options-avancees">Options avancées</a></h3>
<p>La commande find possède aussi un nombre d’options qui permettent de répondre à
certaines questions telles que : “Quels sont les fichiers qui ont été modifiés
dernièrement ?” ou “Quels sont les fichiers dont les permissions ont été
changées récemment ?”…</p>
<h4 id="recherche-par-date-de-derniere-modification-du-contenu"><a class="toclink" href="#recherche-par-date-de-derniere-modification-du-contenu">Recherche par date de dernière modification du contenu</a></h4>
<p>Cette recherche s’effectue grâce à l’option -mtime. Elle prend en paramètre un
entier, un nombre de jours (période de 24 heures). Pour trouver tous les
fichiers dans /etc appartenant à root et dont le contenu a été modifié il y a
moins de deux jours, il suffit de faire ceci :</p>
<div class="highlight"><pre><span></span><code><span class="c1"># notez le -2</span>
find /etc -mtime -2 -user root
</code></pre></div>
<p>Pour trouver ceux qui ont été modifiés il y a plus de 5 jours :</p>
<div class="highlight"><pre><span></span><code><span class="c1"># notez le +5</span>
find /etc -mtime +5 -user root
</code></pre></div>
<p>Et ceux qui ont été modifiés il y a 10 jours exactement :</p>
<div class="highlight"><pre><span></span><code><span class="c1"># pas de + ou de -</span>
find /etc -mtime <span class="m">10</span> -user root
</code></pre></div>
<h4 id="options-relatives-aux-dates"><a class="toclink" href="#options-relatives-aux-dates">Options relatives aux dates</a></h4>
<p>Les options suivantes sont similaires à l’option vue précédemment.</p>
<ul>
<li>-atime permet de trouver un fichier par date de dernier accès ;</li>
<li>-ctime permet de trouver un fichier par date de dernière modification des
permissions ou de changement de propriétaire.</li>
</ul>
<p>Il existe également la version minute des options précédentes : -mmin, -amin, -cmin.</p>
<p>Voici un exemple permettant de trouver les fichiers dans /var/www pour lesquels
il y a eu un accès dans les 2 dernières minutes.</p>
<div class="highlight"><pre><span></span><code>find /var/www -amin -2
</code></pre></div>
<h4 id="recherche-par-permission"><a class="toclink" href="#recherche-par-permission">Recherche par permission</a></h4>
<p>L’option -perm permet de trouver des fichiers en fonction de leurs permissions.
Il est possible d’utiliser la notation octale pour spécifier la valeur des
permissions, par exemple 0755, ou la notation littérale u=rwx,g=rw,o=rw.</p>
<p>Trois notations sont utilisables avec les permissions : sans préfixe, précédé
du signe – ou précédé du signe /.</p>
<ul>
<li>Sans préfixe : le mode du fichier doit être exactement celui passé à l’option
-perm. Par exemple, si on cherche les fichiers ayant le mode u=rwx (0700),
tous les fichiers que l’on trouvera auront exactement le mode u=rwx (0700).</li>
<li>– : le mode du fichier doit être au moins égal à celui passé à l’option
-perm. Par exemple, si on cherche les fichiers ayant le mode -u=r (-0400),
tous les fichiers que l’on trouvera auront alors les modes suivants : u=r ou
u=rw ou u=rx ou u=rwx ou u=r,g=x…En d’autres termes, cela signifie que si
l’on cherche tous les fichiers en lecture, on pourra trouver aussi ceux qui
sont en lecture et écriture, ou encore en lecture et exécution…</li>
<li>/ : un des modes (user, group ou other) doit être au moins égal à ceux passés
à l’option -perm. Par exemple, si on cherche les fichiers ayant le mode
/u=w,g=w,o=w, tous les fichiers que l’on trouvera auront alors les modes
suivants : u=w ou g=w ou o=w ou u=w,g=w,o=w ou u=rw,g=rwx…</li>
</ul>
<p>N’hésitez surtout pas à faire des essais pour bien comprendre le fonctionnement
de cette option.</p>
<p>Pour trouver les fichiers qui sont exactement en lecture et écriture pour
l’utilisateur, le groupe et les autres, il suffit de faire :</p>
<div class="highlight"><pre><span></span><code>find . -perm <span class="m">666</span>
</code></pre></div>
<p>Pour trouver les fichiers qui sont exécutables par son propriétaire :</p>
<div class="highlight"><pre><span></span><code>find . -perm -u<span class="o">=</span>x
</code></pre></div>
<p>Pour trouver tous mes fichiers de mon répertoire personnel et qui sont en
écriture pour le groupe ou pour les autres :</p>
<div class="highlight"><pre><span></span><code>find ~ -type f -user me -perm /g<span class="o">=</span>w,o<span class="o">=</span>w
<span class="c1"># ou mieux, avec une substitution de commande</span>
find ~ -type f -user <span class="k">$(</span>whoami<span class="k">)</span> -perm /g<span class="o">=</span>w,o<span class="o">=</span>w
</code></pre></div>
<h4 id="identification-des-fichiers-orphelins"><a class="toclink" href="#identification-des-fichiers-orphelins">Identification des fichiers orphelins</a></h4>
<p>Vous avez supprimé des utilisateurs ou groupes du système et vous avez oublié
de supprimer les fichiers associés ? Vous pouvez retrouver ces fichiers grâce
aux options -nouser et -nogroup.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># pour trouver les fichiers qui ne sont pas associés à un user id existant</span>
find / -nouser
<span class="c1"># pour trouver les fichiers qui ne sont pas associés à un group id existant</span>
find / -nogroup
</code></pre></div>
<h2 id="effectuer-des-operations-sur-les-fichiers-trouves"><a class="toclink" href="#effectuer-des-operations-sur-les-fichiers-trouves">Effectuer des opérations sur les fichiers trouvés</a></h2>
<p>Maintenant que vous savez rechercher des fichiers, vous allez pouvoir exécuter
des commandes sur les fichiers trouvés. Bien que nde la commafind dispose de
son propre mécanisme pour exécuter des commandes, nous utiliserons args car il
est plus souple et plus rapide. Cette commande reçoit sur l’entrée standard
(stdin), grâce à un pipe (tube), la liste des fichiers trouvés. Elle exécute
ensuite la commande passée en argument sur la liste complète des fichiers reçus
via stdin.</p>
<p>Ainsi, il est possible de supprimer tous les fichiers thumbs.db (fichiers
système Windows) que l’on aurait copiés via samba dans notre répertoire personnel.</p>
<div class="highlight"><pre><span></span><code>find ~ -type f -iname <span class="s2">"thumbs.db"</span> -print0 <span class="p">|</span> xargs -0 -r rm -v
</code></pre></div>
<p>Une bonne pratique d’utilisation consiste à utiliser l’option -print0 et
l’argument -0 pour éviter d’avoir des problèmes avec les espaces ou les
caractères spéciaux dans les chemins. En effet, par défaut, xargs s’attend à ce
que les fichiers soient délimités par des espaces, si un espace se trouve dans
le nom du fichier, il y aura donc un problème. Ces deux options permettent donc
de délimiter les noms des fichiers grâce à un caractère <span class="caps">NULL</span>, pensez-y
systématiquement pour éviter les erreurs. L’option -r permet d’éviter
d’exécuter la commmande passée en argument si la liste des fichiers trouvés est vide.</p>
<p>Pour déplacer toutes les images de votre ~/Desktop dans le dossier ~/Pictures :</p>
<div class="highlight"><pre><span></span><code>find ~/Desktop <span class="se">\(</span> -iname <span class="s2">"*.jpg"</span> -o -iname <span class="s2">"*.gif"</span> -o -iname <span class="s2">"*.png"</span> -o -iname <span class="s2">"*.bmp"</span> <span class="se">\)</span> -print0 <span class="p">|</span> xargs -0 mv --target-directory ~/Pictures
</code></pre></div>
<p>N’oubliez pas les parenthèses car le <span class="caps">ET</span> est prioritaire sur le <span class="caps">OU</span>, car il y a
un <span class="caps">ET</span> implicite juste avant le -print0.</p>
<p>J’utilise souvent la commande find pour remettre les droits sur les fichiers et
les dossiers.</p>
<div class="highlight"><pre><span></span><code>find ~ -type f -print0 <span class="p">|</span> xargs -0 chmod -c <span class="m">0600</span>
find ~ -type d -print0 <span class="p">|</span> xargs -0 chmod -c <span class="m">0700</span>
</code></pre></div>
<h2 id="astuces"><a class="toclink" href="#astuces">Astuces</a></h2>
<h3 id="ne-pas-afficher-les-messages-derreur"><a class="toclink" href="#ne-pas-afficher-les-messages-derreur">Ne pas afficher les messages d’erreur</a></h3>
<p>Quand la commande find n’a pas les droits pour accéder à un fichier, un message
d’erreur s’affiche et risque de polluer l’affichage. Pour éviter d’afficher ces
erreurs, il suffit de rediriger stderr vers /dev/null.</p>
<div class="highlight"><pre><span></span><code>find / <span class="m">2</span>>/dev/null
<span class="c1"># avec xargs</span>
find / -print0 <span class="m">2</span>> /dev/null <span class="p">|</span> xargs -0 ls -lh
</code></pre></div>
<p>Trouver et renommer des fichiers contenant des caractères non imprimables</p>
<p>Il peut arriver sous Linux que des fichiers soient formés de caractères non
imprimables, pour diverses raisons… Il faut alors connaitre l’inode du
fichier pour pouvoir le renommer grâce à la commande find, pour cela, il suffit
de faire un ls -ali.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># 120281 est l'inode recherché</span>
find . -inum <span class="m">120281</span> -print0 <span class="p">|</span> xargs -0 mv new_file_name
</code></pre></div>
<h3 id="ignorer-des-dossiers"><a class="toclink" href="#ignorer-des-dossiers">Ignorer des dossiers</a></h3>
<p>Pour ignorer un dossier, on doit utiliser l’option -prune. Cette option est une
action qui indique à la commande find de ne pas descendre dans le dossier
trouvé. Il faut utiliser l’option -prune en combinaison du <span class="caps">OU</span> -o. La partie
située avant le -prune est la condition qui indique quel dossier ignorer, la
partie droite indique les critères de recherche, dans le cas où on ne souhaite
pas mettre de critère à droite mais simplement afficher, il suffit de mettre un
-print qui est l’action par défaut de la commande find.</p>
<p>Par exemple, pour trouver tous les fichiers qui ne sont pas dans /proc ou /var,
on fait :</p>
<div class="highlight"><pre><span></span><code>find / <span class="se">\(</span> -path /proc -o -path /var <span class="se">\)</span> -prune -o -print
</code></pre></div>
<p>Et pour trouver tous les fichiers non vides, tout en ignorant /proc et /var, on
fait :</p>
<div class="highlight"><pre><span></span><code>find / <span class="se">\(</span> -path /proc -o -path /var <span class="se">\)</span> -prune -o ! -empty -print
</code></pre></div>
<p>Pour trouver tous les fichiers non vides de mon répertoire personnel qui ne se
trouvent pas dans un dossier caché (commençant par un .), on fait :</p>
<div class="highlight"><pre><span></span><code>find ~ -name <span class="s2">".*"</span> -prune -o ! -empty -print
</code></pre></div>
<h3 id="limiter-la-profondeur-daction"><a class="toclink" href="#limiter-la-profondeur-daction">Limiter la profondeur d’action</a></h3>
<p>Contrairement à la plupart des autres commandes sous <span class="caps">GNU</span> Linux, find descend
dans les sous-répertoires sans qu’on ait à le lui demander. Parfois, il est
possible que l’on souhaite limiter la profondeur maximale ou minimale.</p>
<p>L’option -maxdepth permet de spécifier la profondeur maximale des répertoires
dans lesquels on va descendre. Si on indique 0 à cette option, cela signifie
que les tests ne vont s’appliquer qu’aux arguments passés à find, testez, vous comprendrez.</p>
<div class="highlight"><pre><span></span><code>find / -maxdepth <span class="m">2</span>
/boot/map
...
/bin/nc
/bin/ping
/bin/bzcat
...
/var/cache
/var/lock
/var/mail
/var/tmp
/tmp
</code></pre></div>
<p>L’option -mindepth permet de spécifier la profondeur minimale des répertoires
dans lesquels find effectuera les tests. Si on indique 1 à cette option, cela
signifie que la commande find effectuera les tests sur tous les fichiers sauf à
ses arguments.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># n'affichera que le contenu de tous les répertoires personnels</span>
find /home -mindepth <span class="m">2</span>
</code></pre></div>
<p>Enfin, une dernière option qui peut être intéressante dans certains cas :
-depth. Elle permet de procéder au contenu du répertoire avant le répertoire
lui-même. Imaginez une arborescence de répertoires vides, ne contenant aucun
fichier. Pour les supprimer, il faut d’abord supprimer les répertoires fils. On
peut donc le faire avec l’option -depth.</p>
<div class="highlight"><pre><span></span><code>find empty_dirs -depth -print0 <span class="p">|</span> xargs -0 rmdir
</code></pre></div>
<h3 id="affichage-personnalise"><a class="toclink" href="#affichage-personnalise">Affichage personnalisé</a></h3>
<p>Vous pourrez peut-être apprécier les arguments utilisables avec l’option
-printf qui permet de personnaliser l’affichage sur la sortie standard stdout.
Cette option, tout comme le printf du C, prend une chaîne en argument, et cette
chaîne représente le format de l’affichage. Les arguments possibles sont
consultables via un man find.</p>
<div class="highlight"><pre><span></span><code>find /bin -printf <span class="s2">"name: %20f - size: %10s\n"</span>
name: bin - size: <span class="m">4096</span>
name: bzfgrep - size: <span class="m">6</span>
name: mount - size: <span class="m">64112</span>
name: mkdir - size: <span class="m">29344</span>
name: rmdir - size: <span class="m">23480</span>
name: which - size: <span class="m">946</span>
name: mktemp - size: <span class="m">6672</span>
name: nc - size: <span class="m">20</span>
name: ping - size: <span class="m">30788</span>
</code></pre></div>
<h2 id="conclusion"><a class="toclink" href="#conclusion">Conclusion</a></h2>
<p>Nous venons de voir un aperçu de la commande find. Il existe bien d’autres
options mais il s’agit ici des plus intéressantes. N’hésitez pas à consulter la
page de manuel de cette commande vraiment pratique.</p>