Allez, c'est vraiment parce que j'ai pas pu résister...
1)
La commande affiche chaque ligne contenant "floppy" parmi les lignes de tous les fichiers du répertoire /etc, mais avec une erreur...
2)
find parcourt le répertoire /etc et ses sous-répertoires à la recherche de fichiers classiques (c'est à dire ni répertoire, ni lien symbolique, ni fichier spécial...). Pour chacun de ces fichiers, il affiche le nom du fichier sur une ligne. Un extrait de la sortie du find peut alors ressembler à :
/etc/passwd
/etc/group
/etc/fichier avec un espace
/etc/fichier_sans_espace
La sortie standard de la commande find est alors passée comme entrée standard à la commande xargs.
Ensuite, xargs va lire son entrée standard comme une liste de noms, séparés par des espaces ou des sauts de ligne, et va appeler la commande grep pour chaque membre de la liste :
Le nom qui contenait des espaces a été découpé sur plusieurs commande, ce qui va produire des messages d'erreurs (qui seront supprimés après, par le 2>/dev/null) et ne lancera pas la recherche dans le bon fichier. D'autres erreurs se produisent avec les noms de fichiers contenant des retours à la ligne, des apostrophes ou des guillemets, ou finissant par un backslash...
Enfin, la dernière partie de la commande redirige les messages d'erreur dans le fichier spécial /dev/null, ce qui empèche leur affichage.
Pour corriger le problème des fichiers dont le nom comporte des espaces ou d'autres caractères spéciaux, on peut faire:
find /etc -type f -print0 | xargs --null grep floppy 2> /dev/null
Les noms de fichiers sont alors séparés par des caractères "null" (code ascii 0) en sortie du find, et xargs ne tient compte que de ces caractères "null" comme séparateurs de la liste. Le problème est complètement résolu car le caractère "null" est interdit dans les noms de fichiers.
# exo7
Posté par jimee . En réponse au message aide commande linux. Évalué à 3.
1)
La commande affiche chaque ligne contenant "floppy" parmi les lignes de tous les fichiers du répertoire /etc, mais avec une erreur...
2)
find parcourt le répertoire /etc et ses sous-répertoires à la recherche de fichiers classiques (c'est à dire ni répertoire, ni lien symbolique, ni fichier spécial...). Pour chacun de ces fichiers, il affiche le nom du fichier sur une ligne. Un extrait de la sortie du find peut alors ressembler à :
/etc/passwd
/etc/group
/etc/fichier avec un espace
/etc/fichier_sans_espace
La sortie standard de la commande find est alors passée comme entrée standard à la commande xargs.
Ensuite, xargs va lire son entrée standard comme une liste de noms, séparés par des espaces ou des sauts de ligne, et va appeler la commande grep pour chaque membre de la liste :
grep floppy /etc/passwd
grep floppy /etc/group
grep floppy /etc/fichier
grep floppy avec
grep floppy un
grep floppy espace
grep floppy /etc/fichier_sans_espace
Le nom qui contenait des espaces a été découpé sur plusieurs commande, ce qui va produire des messages d'erreurs (qui seront supprimés après, par le 2>/dev/null) et ne lancera pas la recherche dans le bon fichier. D'autres erreurs se produisent avec les noms de fichiers contenant des retours à la ligne, des apostrophes ou des guillemets, ou finissant par un backslash...
Enfin, la dernière partie de la commande redirige les messages d'erreur dans le fichier spécial /dev/null, ce qui empèche leur affichage.
Pour corriger le problème des fichiers dont le nom comporte des espaces ou d'autres caractères spéciaux, on peut faire:
find /etc -type f -print0 | xargs --null grep floppy 2> /dev/null
Les noms de fichiers sont alors séparés par des caractères "null" (code ascii 0) en sortie du find, et xargs ne tient compte que de ces caractères "null" comme séparateurs de la liste. Le problème est complètement résolu car le caractère "null" est interdit dans les noms de fichiers.