Vous
pouvez utiliser la commande find pour rechercher dans un répertoire et
ses sous-répertoires les fichiers répondant à certains critères.
Vous pouvez ensuite exécuter une commande sur tous les fichiers
repérés.
Recherche
de fichiers dont le nom concorde avec une chaîne de caractères
donnée |
 |
Même si la syntaxe de la commande find peut sembler complexe, cette commande peut vous
aider à utiliser HP-UX de façon plus productive. C’est
une commande puissante et souple. Toutefois, son exécution
peut être lente, surtout si la recherche se déroule
dans plusieurs répertoires.
Supposons que vous vouliez lister tous les fichiers dont le
nom commence par un « d » et
qui sont contenus dans le répertoire courant et ses sous-répertoires.
Entrez alors :
find(1)
Le point (.) indique que la recherche se fait dans le répertoire
courant et ses sous-répertoires. L’option -name suivie d’un nom de fichier ou d’un nom
de fichier avec des caractères génériques
(en l’occurrence d*) précise que la recherche doit porter
sur tous les noms de fichiers qui commencent par un d.
Remarquez que d* est placé entre apostrophes ’d*’. Si vous utilisez un nom de fichier
avec des caractères génériques dans la
commande find, vous devez le placer entre apostrophes pour que
le shell l’interprète correctement.
Recherche
de fichiers plus récents qu’un fichier donné |
 |
Supposons que vous vouliez lister tous les fichiers qui ont été modifiés après
la date de la dernière modification d’un fichier
donné. Pour afficher tous les fichiers plus récents
que monfich dans le répertoire /home/pierre et ses sous-répertoires, entrez :
$ find /home/pierre -newer monfich |
On peut interpréter cette commande comme suit : trouver
dans le répertoire /home/pierre et ses sous-répertoires tous les fichiers
qui ont été modifiés après monfich et afficher le résultat à l’écran.
(Pour connaître la date et l’heure de la dernière
modification d’un fichier, utilisez la commande ll.)
Exécution
de commandes sur les fichiers |
 |
Vous pouvez exécuter des commandes sur les fichiers
repérés avec la commande find. Supposons que vous vouliez détruire
tous les fichiers ayant le suffixe .tmp, contenus dans le répertoire courant
et ses sous-répertoires. Entrez :
$ find . -name ’*.tmp’ -exec rm {} \; |
Dans cet exemple, tous les fichiers contenus dans le répertoire
courant et ses sous-répertoires dont le suffixe est .tmp sont affichés, puis supprimés.
L’option -exec entraîne l’exécution
de la commande qui suit (rm). Les accolades { } représentent les
fichiers trouvés par la commande find. Le point-virgule qui termine la chaîne
de commandes est précédé d’une
barre oblique inverse (\;) afin que le shell l’interprète correctement.
Utilisation
d’opérateurs logiques |
 |
La syntaxe de find comprend les opérateurs logiques booléens
NON, ET et OU.
Pour repérer les fichiers qui ne correspondent pas à une
expression spécifique, utilisez l’opérateur
logique NON, le point d’exclamation (!). Après cet opérateur, vous
devez utiliser des options pour définir les attributs de
fichier comme un nom de fichier. Ensuite, les fichiers qui
ne possèdent pas les attributs spécifiés
sont repérés.
Par exemple, pour repérer tous les fichiers de /tmp qui n’appartiennent pas à pierre, utilisez cette commande :
$ find /tmp \( ! -user pierre \) |
La barre oblique inverse (\) permet de ne pas tenir compte des parenthèses
de façon qu’elles ne soient pas interprétées
comme des caractères spéciaux par le shell.
Pour repérer les fichiers qui possèdent
deux attributs distincts, utilisez l’opérateur
logique ET, expression -a expression. Par exemple, pour repérer tous les répertoires
de / qui appartiennent à pierre, utilisez cette commande :
$ find / \( -type d -a -user pierre \) |
Pour repérer les fichiers qui possèdent
l’un des attributs ou les deux, utilisez l’opérateur
logique OU, expression -o expression Par exemple, pour supprimer tous les fichiers qui
se terminent par a.out ou nommés *.o auxquels vous n’avez pas eu accès
pendant la semaine, utilisez cette commande :
$ find / \( -name a.out -o -name ’*.o’ \) -atime +7 -exec rm {} \; |
Pour
de plus amples informations
Pour plus de détails sur l’utilisation de
la commande find, reportez-vous à la page de manuel find(1).