#1 Le 05/03/2023, à 12: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 !
Dernière modification par Sky3RN (Le 05/03/2023, à 13:24)
Hors ligne
#2 Le 05/03/2023, à 12: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, à 13:22)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 05/03/2023, à 13:10
- Sky3RN
Re : [RÉSOLU] Alias de recherche qui ne fonctionne pas..
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.
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 `()'
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, à 13:12)
Hors ligne
#4 Le 05/03/2023, à 13: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, à 13:24
- Sky3RN
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.
Merci ! Pour le guillemet j'avais fini par trouver. 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, à 19:14
- FrancisFDZ
Re : [RÉSOLU] Alias de recherche qui ne fonctionne pas..
Bonjour,
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