[size=150]Exemple N° 1[/size]
J’ai un répertoire avec 100000 fichiers dedans
luciole:/home/bej/temp# ls | wc -l
100004
luciole:/home/bej/temp#
Oui, bon je sais, j’ai exagéré, mais c’est pour l’exemple.
Le problème:
Je voudrais rechercher un mot ou une chaîne de caractères dans un ou plusieurs fichiers qui se trouvent dans ce répertoire.
J’essaye:
luciole:/home/bej/temp# grep toto *
bash: /bin/grep: Liste d'arguments trop longue
luciole:/home/bej/temp#
Impossible de faire directement un grep sur un aussi grand nombre de fichiers.
Solution:
“Piper” ls avec xargs:
luciole:/home/bej/temp# ls | xargs grep toto
fic597:toto
fic598:toto
luciole:/home/bej/temp#
[size=150]Exemple N° 2[/size]
Comment chercher des fichiers avec find et appliquer une commande sur le résultat trouvé.
Le problème:
Je dois retrouver tous les fichiers qui contiennent le mot “toto”. Je ne sais pas du tout oû se trouvent ces fichiers.
Solution 1:
Attention, la machine va mouliner un max. pendant pas mal de temps …
Cette commande:
- recherche tous les fichiers de type “regular file” (voir la man page de find)
- Exécute la commande grep sur le fichier trouvé avec le paramètre “toto”
- les accolades {} servent à stocker le nom du fichier trouvé
C’est super efficace mais ce n’est pas la seule technique…
On peut très bien appliquer d’autres opérations qu’un grep sur les fichiers trouvés, par exemple mv, cp ou encore rm, bref…
[size=150]Exemple N° 3[/size]
Il arrive que nos “chers utilisateurs” se croient sous windows et se permettent n’importe quoi quand aux noms de répertoires.
Par exemple un nom de répertoire … sans nom ! ou avec des caractères non imprimables…
Comment renommer ce répertoire ?
Solution:
On affiche le numéro d’inode du répertoire concerné
et ensuite on fait un find sur ce numéro d’inode pour ensuite le renommer: