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 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

Watael a écrit :

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 smile

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 smile

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 tongue

j'etais plus parti sur l'utilisation de printf, mais si on peut pas, ca sera deja ca smile

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 smile


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 tongue

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 tongue

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

Hizoka a écrit :

oki tongue

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

Hizoka a écrit :

Bon ca passe mais ca n'ameliore pas le temps de travail tongue...

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 smile
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 big_smile
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 wink

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 tongue


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

Hizoka a écrit :

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 smile

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