#1 Le 23/01/2012, à 01:08
- Hizoka
Amelioration de quelques commandes bash
Bonsoir,
j'ai quelques commandes que je voudrais essayé d'ameliorer :
1) Est-il possible de determiner lorsqu'un terminal attend le mot de passe root ?
Perso je fais :
$(pstree ${TERMINAL_PID} | egrep "sudo$")
j'affiche les sous actions du terminal et je regarde si la derniere action est sudo.
2) Je voudrais me passer de sed, le tout en une ligne de commande aussi :
find "${sources}" -iname "*.tar.gz" | sed "s@${sources}/@@ ; s/.tar.gz$//" | sort
je n'ai pas reussis a faire ce que je voulais avec -printf.
Cette commande me permet de lister les tar.gz, de ne conserver que la partie relatif du fichier et de supprimer l'extension :
Soit les fichiers :
- /home/hizoka/1/3/test3.tar.gz
- /home/hizoka/1/2/test.tar.gz
find "/home/hizoka/" -iname "*.tar.gz" | sed "s@/home/hizoka/@@ ; s/.tar.gz$//" | sort
=> 1/2/test
=> 1/3/test3
Autre question, sort sert il a quelque chose ? find ne recherche-t-il pas dans dans l'ordre les fichiers ?
merci
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#2 Le 23/01/2012, à 03:12
- Watael
Re : Amelioration de quelques commandes bash
salut,
pour la seconde
find /home/hizoka -type f -iname '*.tar.gz' -printf '%P\n' | xargs -i basename {} .tar.gz | sort
le `sort' est nécessaire il me semble
touch a b c 1 2 3
find
./a
./b
./c
./3
./1
./2
surprenant, non ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 23/01/2012, à 03:41
- aduxas
Re : Amelioration de quelques commandes bash
surprenant, non ?
d'autant plus que chez moi
.
./b
./1
./2
./a
./c
./3
Hors ligne
#4 Le 23/01/2012, à 04:07
- Hizoka
Re : Amelioration de quelques commandes bash
merci de vos reponses, mais mon but est de virer un pipe et une commande
remplacer sed par xargs ne m'apporte pas grand chose.
et chez moi :
.
./3
./2
./b
./1
./c
./a
donc, le sort est a conserver
Dernière modification par Hizoka (Le 23/01/2012, à 04:08)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 26/01/2012, à 16:08
- Hizoka
Re : Amelioration de quelques commandes bash
pas d'autres idées ?
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#6 Le 26/01/2012, à 17:10
- credenhill
Re : Amelioration de quelques commandes bash
est-ce que
find ... -exec ...
est acceptable, vu que le pipe est "caché" ?
Hors ligne
#7 Le 26/01/2012, à 17:15
- Hizoka
Re : Amelioration de quelques commandes bash
Pourquoi pas
j'etais plus parti sur l'utilisation de printf, mais si on peut pas, ca sera deja ca
mais tu fais comment ?
find "${sources}" -iname "*.tar.gz" -exec sed "s@${sources}/@@ ; s/.tar.gz$//" \;
ne marche pas
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#8 Le 26/01/2012, à 17:30
- AnsuzPeorth
Re : Amelioration de quelques commandes bash
Bjr,
find $HOME -iname "*.txt" -exec bash -c 'sed "s/.txt//;s@'"${HOME}"'/@@" <<< {}' \;
EDIT: ou
find $HOME -maxdepth 1 -iname "*.txt" -exec bash -c 'var={}; var=${var%.*}; echo ${var##*/}' \;
Dernière modification par AnsuzPeorth (Le 26/01/2012, à 17:33)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#9 Le 26/01/2012, à 17:32
- Hizoka
Re : Amelioration de quelques commandes bash
oki, je teste ca
je vais regarder egalement si c'est plus rapide
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#10 Le 26/01/2012, à 17:35
- AnsuzPeorth
Re : Amelioration de quelques commandes bash
J'ai EDIT mon précédent message.
Mais ca m'étonnerait que ce soit plus rapide ! Bien que je me méfie avec mes suppositions :d
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#11 Le 26/01/2012, à 17:36
- Hizoka
Re : Amelioration de quelques commandes bash
Bon ca passe mais ca n'ameliore pas le temps de travail
time for ((i=0;i<20;i++)); do find "${sources}" -iname "*.tar.gz" -exec bash -c 'sed "s@'${sources}'/@@ ; s/.tar.gz$//" <<< {}' \; ; done
real 0m0.297s
time for ((i=0;i<20;i++)); do find "${sources}" -iname "*.tar.gz" | sed "s@${sources}/@@ ; s/.tar.gz$//" ; done
real 0m0.051s
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#12 Le 26/01/2012, à 18:00
- AnsuzPeorth
Re : Amelioration de quelques commandes bash
Pour le fun, mais c'est de la triche :d
time python -c "import os; print '\n'.join([ f.split('/')[-1].split('.')[0] for f in os.listdir('$HOME') if '.txt' in f ]) * 20"
real 0m0.026s
Avec le pipe normal: 0m0.180s
find + exec bash sed: 0m1.998s
find + exec bash:0m1.178s
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#13 Le 26/01/2012, à 18:11
- AnsuzPeorth
Re : Amelioration de quelques commandes bash
Aller, encore une solution ... Plus rapide celle là, sans tricher !
time for i in {0..20}; do TAB=( *.txt ); printf '%s\n' "${TAB[@]%.*}"; done
real 0m0.031s
Suffit de faire un cd dans le dossier voulu avant.
Dernière modification par AnsuzPeorth (Le 26/01/2012, à 18:12)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#14 Le 26/01/2012, à 18:54
- Hizoka
Re : Amelioration de quelques commandes bash
oki
et pour
$(pstree ${TERMINAL_PID} | egrep "sudo$")
as tu une autre idée que ce systeme pour determiner si le terminal attend un mot de passe ?
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#15 Le 26/01/2012, à 19:19
- AnsuzPeorth
Re : Amelioration de quelques commandes bash
oki
et pour
$(pstree ${TERMINAL_PID} | egrep "sudo$")
as tu une autre idée que ce systeme pour determiner si le terminal attend un mot de passe ?
Nop, je vois pas ...
Sinon, tu peux qd meme te passer du pipe et de egrep
[[ "$(pstree 10638)" =~ 'sudo$' ]] && echo ok
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#16 Le 26/01/2012, à 19:32
- Totor
Re : Amelioration de quelques commandes bash
Bon ca passe mais ca n'ameliore pas le temps de travail ...
Rien d'étonnant, dans un cas sed n'est chargé qu'une seule fois, dans l'autre, bash l'est autant de fois que le find trouve une occurence de fichier correspondant à tes critères !
En zsh :
printf "%s\n" "${${(f)$(printf "%s\n" "${sources}"/**/*.*.*)}[@]:r:r:s:${sources}/::}"
Dernière modification par Totor (Le 27/01/2012, à 01:23)
-- Lucid Lynx --
Hors ligne
#17 Le 26/01/2012, à 20:52
- aduxas
Re : Amelioration de quelques commandes bash
Pour find -exec, as-tu regardé {}+ au lieu de {}?
Hors ligne
#18 Le 27/01/2012, à 00:20
- Hizoka
Re : Amelioration de quelques commandes bash
AnsuzPeorth => ouais c'est un peu mieux.
Totor => j'esperai que le printf de find aurait pu me pondre directement ce que je voulais
mais a priori, c'est pas possible donc bon...
ton code se place où ? dans le find ? ca passe en bash ?
aduxas => je ne connaissais pas {}+, tu as une idée pour améliorer le truc ?
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#19 Le 27/01/2012, à 01:23
- Totor
Re : Amelioration de quelques commandes bash
pas de find, pas de bash... que du zsh
une instruction qui fait ce que tu demandes : lister tous les fichiers sans la double extensioon et sans le dossier de recherche ...
un truc bien obscure comme le dirait sputnick
Dernière modification par Totor (Le 27/01/2012, à 01:26)
-- Lucid Lynx --
Hors ligne
#20 Le 27/01/2012, à 01:28
- Hizoka
Re : Amelioration de quelques commandes bash
carrément
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#21 Le 27/01/2012, à 03:31
- aduxas
Re : Amelioration de quelques commandes bash
aduxas => je ne connaissais pas {}+, tu as une idée pour améliorer le truc ?
En fait, il faut un blanc devant le plus. Tu te plains (à juste titre) que la première methode dans ton post #11 est lente. Comme dit Totor, c'est parce que tu lances la shell pour chaque réponse trouvée. Avec {} + au lieu de {}, il les collectionne avant de faire l'exec. La restriction, c'est que tu peux utiliser {} + qu'une seule fois dans ta commande. Le nombre de fois il exécute la commande n'est pas 1, ça dépend de l'allure à laquelle les réponses sont trouvées, je crois.
Hors ligne
#22 Le 27/01/2012, à 11:04
- credenhill
Re : Amelioration de quelques commandes bash
et ?
H=/home/hizoka ; sed "s@${H}/@@ ; s/.tar.gz$//" <<<"$(find $H -iname '*.tar.gz')"
Hors ligne
#23 Le 27/01/2012, à 18:29
- Hizoka
Re : Amelioration de quelques commandes bash
time for ((i=0;i<20;i++)); do sed "s@${sources}/@@ ; s/.tar.gz$//" < <(find ${sources} -iname '*.tar.gz') ; done
real 0m0.052s
Bon bah finalement j'étais pas si mal avec ma commande
je pensais ne pas savoir utiliser le pintf de find comme il fallait mais a priori ce n'était pas possible, donc je vais rester comme ça.
Merci à vous !
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne