Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/03/2023, à 12:16

Tawal

Bonne commande : cat $(find ...) ou find ... -exec cat '{}' \+

Hello,

Je regardais un peu le paquet isenkram.
Dans le man isenkram-lookup, je trouve cette commande (pour trouver les modalias de la machine ) :

cat $(find /sys -name modalias) | sort -u

Je ne la trouve pas top et elle retourne des erreurs de permissions sur certains "répertoires".
Puis dans une autre documentation (tout en bas de cette page), je trouve celle-ci :

cat $(find /sys/devices/|grep modalias)

Elles est plus propre en retour, mais bon un pipe, une substitution de commande ...
Le pipe est évitable avec le test -name de find.


J'aurais plutôt écrit ceci (en minimaliste) :

find /sys/devices/ -name modalias -exec cat '{}' \+

Qu'en pensez-vous ?
Je suis étonné devoir de telles commandes dans un man.


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#2 Le 08/03/2023, à 13:10

kamaris

Re : Bonne commande : cat $(find ...) ou find ... -exec cat '{}' \+

Les gens privilégient souvent la lisibilité/simplicité, en estimant qu'un pipe et une substitution de commande sont plus lisibles/simples qu'une seule commande find (ou autre) ad hoc.
Un autre argument est que plus une commande est complexe, plus on va devoir se poser des questions sur sa portabilité, alors qu'un pipe et une substitution de commande, typiquement, ça marchera toujours.
D'autres arguments encore sont : négligence, fainéantise, manque de compétence big_smile

Hors ligne

#3 Le 08/03/2023, à 13:56

Tawal

Re : Bonne commande : cat $(find ...) ou find ... -exec cat '{}' \+

Donc tu confirmerais que la bonne forme serait la mienne.

Analogie à ce que tu dis :
Si un jour mon maçon me dit : "Je fais le mur en moins bien mais ce sera plus joli et plus facile de savoir comment ça a été fait."
Je le fous dehors !


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#4 Le 08/03/2023, à 14:20

kamaris

Re : Bonne commande : cat $(find ...) ou find ... -exec cat '{}' \+

> Donc tu confirmerais que la bonne forme serait la mienne.

En fait je pense que ce serait plutôt -name '*modalias*'

Hors ligne

#5 Le 08/03/2023, à 14:51

Watael

Re : Bonne commande : cat $(find ...) ou find ... -exec cat '{}' \+

kamaris a écrit :

D'autres arguments encore sont : négligence, fainéantise, manque de compétence

on peut ajouter héritage de pratiques d'un autre âge.

tous les fichiers trouvés sont nommés modalias : aucun préfixe ni suffixe.

le grep est vraiment une erreur.
mais je ne vois pas de gain (sur 1000 itérations) entre la commande de Tawal et la première du man.

PS : le + n'étant pas un caractère spécial pour le shell il n'est pas indispensable de le protéger.
ça me fait encore bizarre de ne pas le protéger. smile

Dernière modification par Watael (Le 08/03/2023, à 14:53)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 08/03/2023, à 16:29

diesel

Re : Bonne commande : cat $(find ...) ou find ... -exec cat '{}' \+

Tawal a écrit :

Donc tu confirmerais que la bonne forme serait la mienne.

Analogie à ce que tu dis :
Si un jour mon maçon me dit : "Je fais le mur en moins bien mais ce sera plus joli et plus facile de savoir comment ça a été fait."
Je le fous dehors !

A partir du moment où le résultat (affiché) est le même, les deux se valent (il n'est pas question de mur plus ou moins bien fait).

Donc, à résultat égal, j'aurais effectivement tendance (dans la mesure où il n'y a aucune problématique de temps d'exécution ou de consommation de ressources) à privilégier la forme la plus lisible et la plus portable.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 08/03/2023, à 16:30)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#7 Le 08/03/2023, à 18:02

bruno

Re : Bonne commande : cat $(find ...) ou find ... -exec cat '{}' \+

Watael a écrit :
kamaris a écrit :

D'autres arguments encore sont : négligence, fainéantise, manque de compétence

on peut ajouter héritage de pratiques d'un autre âge.

Comme ce genre de syntaxe :

if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]

wink
Pour comprendre à lire en anglais

En ligne

#8 Le 08/03/2023, à 18:24

serged

Re : Bonne commande : cat $(find ...) ou find ... -exec cat '{}' \+

Pour éviter les messages d'erreur avec "find" (ou d'autres commandes...), il faut renvoyer stderr sur /dev/null :

find [...] 2>/dev/null

LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#9 Le 08/03/2023, à 18:55

kamaris

Re : Bonne commande : cat $(find ...) ou find ... -exec cat '{}' \+

@bruno: excellent l'article, merci wink

Hors ligne

#10 Le 09/03/2023, à 22:40

Tawal

Re : Bonne commande : cat $(find ...) ou find ... -exec cat '{}' \+

Oui, très bon article.


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne