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 05/03/2023, à 13:33

Sky3RN

[RÉSOLU] Alias de recherche qui ne fonctionne pas..

Hello !

J'ai une petite demande pour un alias dans mon terminal.
Habituellement, lorsque je veux faire une recherche, admettons je cherche une musique à moi qui s'appelle Skyërn Aklea - When I Die.wav, je tape :

sudo find / -iname "*when*i*die*" | more

Et ça fonctionne très bien.

Sauf que j'aimerais simplifier ça et ne pas à avoir à taper touuute la ligne de commande, mais par exemple un truc simple comme trouve when i die, alors dans un premier temps j'ai mis cet alias :

alias trouve='sudo find / -iname "'$@'" | more'

En ayant conscience que je dois tout de même déjà garder les étoiles et taper trouve *when*i*die* et.. Ça ne fonctionne pas. Je ne comprends pas trop où ça bloque, si quelqu'un peut m'aider je suis preneur !

╭─(skyern@skyern-desktop:~)───────────────────────────────────────────────────────────────────────────────────────────────────────────────(12:20:02)╮
╰──▸ trouve when i die                                                                                                             (dim. 05 mars 23)╯
find: ‘/run/user/1000/doc’: Permission non accordée
find: ‘/run/user/1000/gvfs’: Permission non accordée
more: échec de stat sur when: Aucun fichier ou dossier de ce type
more: échec de stat sur i: Aucun fichier ou dossier de ce type
more: échec de stat sur die: Aucun fichier ou dossier de ce type
╭─(skyern@skyern-desktop:~)───────────────────────────────────────────────────────────────────────────────────────────────────────────────(12:20:14)╮
╰──▸ trouve when*i*die                                                                                                             (dim. 05 mars 23)╯
zsh: no matches found: when*i*die
find: ‘/run/user/1000/doc’: Permission non accordée
find: ‘/run/user/1000/gvfs’: Permission non accordée
╭─(skyern@skyern-desktop:~)───────────────────────────────────────────────────────────────────────────────────────────────────────────────(12:20:39)╮
╰──▸ trouve *when*i*die*                                                                                                       1 ↵ (dim. 05 mars 23)╯
zsh: no matches found: *when*i*die*
find: ‘/run/user/1000/doc’: Permission non accordée
find: ‘/run/user/1000/gvfs’: Permission non accordée
╭─(skyern@skyern-desktop:~)───────────────────────────────────────────────────────────────────────────────────────────────────────────────(12:21:06)╮
╰──▸ trouve "*when*i*die*"                                                                                                     1 ↵ (dim. 05 mars 23)╯
find: ‘/run/user/1000/doc’: Permission non accordée
find: ‘/run/user/1000/gvfs’: Permission non accordée
more: échec de stat sur *when*i*die*: Aucun fichier ou dossier de ce type

Pourtant j'ai une bonne cinquantaine de fichiers qui contiennent "When I Die" dans leur nom de fichier et lorsque je tape la commande d'origine dans mon terminal je les trouve sans problème.

Voici donc mes questions :
• Pourquoi ça bloque ?
• Comment corriger ça ?
• Comment, si possible, faire en sorte de ne pas à avoir à mettre les étoiles et que les espaces soient remplacés automatiquement par des étoiles ?


Merci d'avance ! smile

Dernière modification par Sky3RN (Le 05/03/2023, à 14:24)

Hors ligne

#2 Le 05/03/2023, à 13:59

Watael

Re : [RÉSOLU] Alias de recherche qui ne fonctionne pas..

salut,

un alias n'accepte pas de paramètres. En conséquence, le $@ qu'il lira sera celui des arguments du shell courant.
c'est pour ça que c'est more qui émet une erreur, parce que l'alias est entre autres exécuté ainsi :

$ sudo find / -iname '' | more when*i*die

pour utiliser des paramètres, tu devrais utiliser une fonction :

trouve() {
   test -n "$1" || { >&2 echo "err: arg needed"; return 1;}
   sudo find / -type f -iname "$(IFS='*'; echo "*$**")" | more
}

mais pourquoi cherches-tu tes fichiers depuis la racine du système de fichiers ?

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


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

Hors ligne

#3 Le 05/03/2023, à 14:10

Sky3RN

Re : [RÉSOLU] Alias de recherche qui ne fonctionne pas..

Watael a écrit :

un alias n'accepte pas de paramètres. En conséquence, le $@ qu'il lira sera celui des arguments du shell courant.
c'est pour ça que c'est more qui émet une erreur, parce que l'alias est entre autres exécuté ainsi :

$ sudo find / -iname '' | more when*i*die

Je comprends mieux ! Ça paraît logique.

Watael a écrit :

pour utiliser des paramètres, tu devrais utiliser une fonction :

trouve() {
   test -n "$1" || { >&2 echo "err: arg needed"; return 1;}
   sudo find / -type f -iname "$(IFS='*'; echo "*$**") | more
}

Je vais tester ça ! Par contre..Question bête mais j'inclus ça comment dans mon terminal / .zshrc ? (Ou .bashrc selon ce que j'utilise, n'importe, c'est pareil.)
Je le glisse n'importe où dans le fichier ?

╰──▸ source .zshrc                                                                                                                 (dim. 05 mars 23)╯
.zshrc:156: defining function based on alias `trouve'
.zshrc:156: parse error near `()'
Watael a écrit :

mais pourquoi cherches-tu tes fichiers depuis la racine du système de fichiers ?

Parce que j'ai plusieurs disques durs du coup avec cette méthode ça inclus aussi /media/skyern/* !

Dernière modification par Sky3RN (Le 05/03/2023, à 14:12)

Hors ligne

#4 Le 05/03/2023, à 14:21

Watael

Re : [RÉSOLU] Alias de recherche qui ne fonctionne pas..

tu peux indiquer plusieurs chemin à find :

$ find /chem1 /chem2 -type f -name "fi*chier*"

il manque un guillemet  après la parenthèse avant | more dans le code de mon message précédent : j'édite et corrige.


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

Hors ligne

#5 Le 05/03/2023, à 14:24

Sky3RN

Re : [RÉSOLU] Alias de recherche qui ne fonctionne pas..

Watael a écrit :

tu peux indiquer plusieurs chemin à find :

$ find /chem1 /chem2 -type f -name "fi*chier*"

il manque un guillemet  après la parenthèse avant | more dans le code de mon message précédent : j'édite et corrige.

Merci ! Pour le guillemet j'avais fini par trouver. tongue Par contre pour l'autre message j'avais pas pensé à taper unalias trouve sinon ça rentre en conflit.

Merci pour tout, le code est parfaît, c'est exactement ce que je cherchais !
Résolu. ;-)

Hors ligne

#6 Le 05/03/2023, à 20:14

FrancisFDZ

Re : [RÉSOLU] Alias de recherche qui ne fonctionne pas..

Bonjour,

Watael a écrit :

tu peux indiquer plusieurs chemin à find :

$ find /chem1 /chem2 -type f -name "fi*chier*"

Merci Watael, j'utilise souvent find mais je ne connaissais pas cette option !


-- On peut avoir des raisons de se plaindre et n'avoir pas raison de se plaindre --
[Victor Hugo]

Hors ligne