Pourquoi la ligne de commande
« shred --remove --verbose --zero !(*.gpg) »
fait bien ce qu'elle doit,
mais que ça coince quand elle se trouve dans
un script bash ? y a-t-il une parade ?
Le message d'erreur : «
erreur de syntaxe près du symbole inattendu « ( »
/home/didier/bin/gpgc: ligne 9: ` shred --remove --verbose --zero
!(*.gpg)'
»
Librement,
Didier.
--
ma céramique : http://didierdescamps.fr
autres bouts de vie : http://didierdescamps.free.fr
--
Didier , dans le message <60be2414$0$3698$, a écrit :
Pourquoi la ligne de commande « shred --remove --verbose --zero !(*.gpg) » fait bien ce qu'elle doit, mais que ça coince quand elle se trouve dans un script bash ?
Probablement parce que le bash interactif active l'option nécessaire.
Didier , dans le message <60be2414$0$3698$426a74cc@news.free.fr>, a
écrit :
Pourquoi la ligne de commande
« shred --remove --verbose --zero !(*.gpg) »
fait bien ce qu'elle doit,
mais que ça coince quand elle se trouve dans
un script bash ?
Probablement parce que le bash interactif active l'option nécessaire.
Didier , dans le message <60be2414$0$3698$, a écrit :
Pourquoi la ligne de commande « shred --remove --verbose --zero !(*.gpg) » fait bien ce qu'elle doit, mais que ça coince quand elle se trouve dans un script bash ?
Probablement parce que le bash interactif active l'option nécessaire.
Didier
Le 07/06/2021 Í 15:50, Didier a écrit : en fouillant un peu, j'arrive Í mes fins en remplaçant la ligne unique par ces 5 lÍ : for a in *; do if [ "${a: -3}" != "gpg" ] ; then shred --remove --verbose --zero $a fi done mais il doit y avoir moyen de faire plus simple ? -- ma céramique : http://didierdescamps.fr autres bouts de vie : http://didierdescamps.free.fr --
Le 07/06/2021 Í 15:50, Didier a écrit :
en fouillant un peu, j'arrive Í mes fins en remplaçant la
ligne unique par ces 5 lÍ :
for a in *; do
if [ "${a: -3}" != "gpg" ] ; then
shred --remove --verbose --zero $a
fi
done
mais il doit y avoir moyen de faire plus simple ?
--
ma céramique : http://didierdescamps.fr
autres bouts de vie : http://didierdescamps.free.fr
--
Le 07/06/2021 Í 15:50, Didier a écrit : en fouillant un peu, j'arrive Í mes fins en remplaçant la ligne unique par ces 5 lÍ : for a in *; do if [ "${a: -3}" != "gpg" ] ; then shred --remove --verbose --zero $a fi done mais il doit y avoir moyen de faire plus simple ? -- ma céramique : http://didierdescamps.fr autres bouts de vie : http://didierdescamps.free.fr --
Benoit Izac
Bonjour, Le 07/06/2021 Í 20:18, Didier a écrit dans le message <60be62db$0$3694$Â :
en fouillant un peu, j'arrive Í mes fins en remplaçant la ligne unique par ces 5 lÍ : for a in *; do if [ "${a: -3}" != "gpg" ] ; then shred --remove --verbose --zero $a fi done mais il doit y avoir moyen de faire plus simple ?
shopt -s extglob -- Benoit Izac
Bonjour,
Le 07/06/2021 Í 20:18, Didier a écrit dans le message
<60be62db$0$3694$426a34cc@news.free.fr>Â :
en fouillant un peu, j'arrive Í mes fins en remplaçant la
ligne unique par ces 5 lÍ :
for a in *; do
if [ "${a: -3}" != "gpg" ] ; then
shred --remove --verbose --zero $a
fi
done
mais il doit y avoir moyen de faire plus simple ?
Bonjour, Le 07/06/2021 Í 20:18, Didier a écrit dans le message <60be62db$0$3694$Â :
en fouillant un peu, j'arrive Í mes fins en remplaçant la ligne unique par ces 5 lÍ : for a in *; do if [ "${a: -3}" != "gpg" ] ; then shred --remove --verbose --zero $a fi done mais il doit y avoir moyen de faire plus simple ?
shopt -s extglob -- Benoit Izac
Francois Lafont
Hello, Perso, pour ces trucs lÍ , j'aime bien utiliser find et éviter le plus possible des « siouxeries » de la syntaxe bash : find /mon/repertoire/ -maxdepth 1 -mindepth 1 -type f '!' -name '*.gpg' -exec shred --remove --verbose --zero '{}' ';' La petite différence ici est que 1) ça ne prendra pas les répertoires et 2) les fichiers dont le nom commence par un point seront pris en compte. Ceci dit, la petite boucle for de Didier me semble pas mal, plutÍ´t explicite ce qui est une bonne idée surtout quand c'est fait pour effacer des données. -- François Lafont
Hello,
Perso, pour ces trucs lÍ , j'aime bien utiliser find et éviter le plus possible des
« siouxeries » de la syntaxe bash :
La petite différence ici est que 1) ça ne prendra pas les répertoires et 2) les
fichiers dont le nom commence par un point seront pris en compte.
Ceci dit, la petite boucle for de Didier me semble pas mal, plutÍ´t explicite ce qui
est une bonne idée surtout quand c'est fait pour effacer des données.
Hello, Perso, pour ces trucs lÍ , j'aime bien utiliser find et éviter le plus possible des « siouxeries » de la syntaxe bash : find /mon/repertoire/ -maxdepth 1 -mindepth 1 -type f '!' -name '*.gpg' -exec shred --remove --verbose --zero '{}' ';' La petite différence ici est que 1) ça ne prendra pas les répertoires et 2) les fichiers dont le nom commence par un point seront pris en compte. Ceci dit, la petite boucle for de Didier me semble pas mal, plutÍ´t explicite ce qui est une bonne idée surtout quand c'est fait pour effacer des données. -- François Lafont
Ça fait le job, et c'est beau ! Mais comme je suis (éternellement) débutant dans ce sport et que j'ai une autre exigence dont je n'ai pas parlé, je suis arrivé Í ça. Le critère répertoire serait-il incorporable dans find ? #!/bin/bash # supprime tout ce qui n'est pas un fichier chiffré (.gpg) # sans explorer les sous répertoires. # Mais uniquement dans ~/.z , car trop dangereux ailleurs # Didier Descamps, juin 2021. ou=`pwd` if [ "${ou:12:3}" = '/.z' ] ; then for a in *; do if [ "${a: -4}" != ".gpg" ] && [ -f $a ]; then shred --remove --verbose --zero $a fi done else echo "Interdit dans ce répertoire !" fi
Ça fait le job, et c'est beau !
Mais comme je suis (éternellement) débutant dans ce sport et que j'ai
une autre exigence dont je n'ai pas parlé, je suis arrivé Í ça.
Le critère répertoire serait-il incorporable dans find ?
#!/bin/bash
# supprime tout ce qui n'est pas un fichier chiffré (.gpg)
# sans explorer les sous répertoires.
# Mais uniquement dans ~/.z , car trop dangereux ailleurs
# Didier Descamps, juin 2021.
ou=`pwd`
if [ "${ou:12:3}" = '/.z' ] ; then
for a in *; do
if [ "${a: -4}" != ".gpg" ] && [ -f $a ]; then
shred --remove --verbose --zero $a
fi
done
else
echo "Interdit dans ce répertoire !"
fi
Ça fait le job, et c'est beau ! Mais comme je suis (éternellement) débutant dans ce sport et que j'ai une autre exigence dont je n'ai pas parlé, je suis arrivé Í ça. Le critère répertoire serait-il incorporable dans find ? #!/bin/bash # supprime tout ce qui n'est pas un fichier chiffré (.gpg) # sans explorer les sous répertoires. # Mais uniquement dans ~/.z , car trop dangereux ailleurs # Didier Descamps, juin 2021. ou=`pwd` if [ "${ou:12:3}" = '/.z' ] ; then for a in *; do if [ "${a: -4}" != ".gpg" ] && [ -f $a ]; then shred --remove --verbose --zero $a fi done else echo "Interdit dans ce répertoire !" fi
Olivier Miakinen
Bonjour, Juste deux petites remarques. Le 08/06/2021 20:06, Didier a écrit :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible, et qui peut s'imbriquer. ou=$(pwd)
if [ "${ou:12:3}" = '/.z' ] ; then
Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}" serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í plusieurs home de longueur différente et que seul le /.z final compte. Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes : if [ "$(basename $(pwd))}" = '.z' ] ; then -- Olivier Miakinen
Bonjour,
Juste deux petites remarques.
Le 08/06/2021 20:06, Didier a écrit :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans
un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible,
et qui peut s'imbriquer.
ou=$(pwd)
if [ "${ou:12:3}" = '/.z' ] ; then
Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire
nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}"
serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í plusieurs home
de longueur différente et que seul le /.z final compte.
Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes :
Bonjour, Juste deux petites remarques. Le 08/06/2021 20:06, Didier a écrit :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible, et qui peut s'imbriquer. ou=$(pwd)
if [ "${ou:12:3}" = '/.z' ] ; then
Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}" serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í plusieurs home de longueur différente et que seul le /.z final compte. Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes : if [ "$(basename $(pwd))}" = '.z' ] ; then -- Olivier Miakinen
Olivier Miakinen
[Supersedes Í cause d'une accolade laissée par erreur] Bonjour, Juste deux petites remarques. Le 08/06/2021 20:06, Didier a écrit :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible, et qui peut s'imbriquer. ou=$(pwd)
if [ "${ou:12:3}" = '/.z' ] ; then
Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}" serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í plusieurs home de longueur différente et que seul le /.z final compte. Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes : if [ "$(basename $(pwd))" = '.z' ] ; then -- Olivier Miakinen
[Supersedes Í cause d'une accolade laissée par erreur]
Bonjour,
Juste deux petites remarques.
Le 08/06/2021 20:06, Didier a écrit :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans
un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible,
et qui peut s'imbriquer.
ou=$(pwd)
if [ "${ou:12:3}" = '/.z' ] ; then
Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire
nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}"
serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í plusieurs home
de longueur différente et que seul le /.z final compte.
Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes :
[Supersedes Í cause d'une accolade laissée par erreur] Bonjour, Juste deux petites remarques. Le 08/06/2021 20:06, Didier a écrit :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible, et qui peut s'imbriquer. ou=$(pwd)
if [ "${ou:12:3}" = '/.z' ] ; then
Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}" serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í plusieurs home de longueur différente et que seul le /.z final compte. Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes : if [ "$(basename $(pwd))" = '.z' ] ; then -- Olivier Miakinen
Benoit Izac
Bonjour, Le 08/06/2021 Í 21:14, Olivier Miakinen a écrit dans le message <s9ofi6$1gr8$Â :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible, et qui peut s'imbriquer.
^^^^^^^^^^^^^^^^^^^^^^^ «Â `…` » s'imbrique aussi, c'est juste qu'il faut les échapper. «Â $(…) » a aussi ses petits problèmes : % echo `(uname -s)` Linux % echo $((uname -s)) 0 -- Benoit Izac
Bonjour,
Le 08/06/2021 Í 21:14, Olivier Miakinen a écrit dans le message
<s9ofi6$1gr8$1@cabale.usenet-fr.net>Â :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans
un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible,
et qui peut s'imbriquer.
^^^^^^^^^^^^^^^^^^^^^^^
«Â `…`Â » s'imbrique aussi, c'est juste qu'il faut les échapper.
Bonjour, Le 08/06/2021 Í 21:14, Olivier Miakinen a écrit dans le message <s9ofi6$1gr8$Â :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible, et qui peut s'imbriquer.
^^^^^^^^^^^^^^^^^^^^^^^ «Â `…` » s'imbrique aussi, c'est juste qu'il faut les échapper. «Â $(…) » a aussi ses petits problèmes : % echo `(uname -s)` Linux % echo $((uname -s)) 0 -- Benoit Izac
Didier
Le 08/06/2021 Í 21:22, Olivier Miakinen a écrit :
ou=$(pwd)
Right!
if [ "${ou:12:3}" = '/.z' ] ; then
Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}" serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í plusieurs home de longueur différente et que seul le /.z final compte. Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes : if [ "$(basename $(pwd))" = '.z' ] ; then
Mais je veux que ça fonctionne aussi dans les sous-répertoires du consacré secret ~/.z , or pwd retourne /.z et non /.z/ et je ne peux donc pas tester un 16eme caractère.À moins de tester aussi la longueur ? ça risque de se compliquer alors.
Le 08/06/2021 Í 21:22, Olivier Miakinen a écrit :
ou=$(pwd)
Right!
if [ "${ou:12:3}" = '/.z' ] ; then
Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire
nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}"
serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í plusieurs home
de longueur différente et que seul le /.z final compte.
Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes :
if [ "$(basename $(pwd))" = '.z' ] ; then
Mais je veux que ça fonctionne aussi dans les sous-répertoires du
consacré secret
~/.z , or pwd retourne /.z et non /.z/ et je ne peux donc pas tester un
16eme caractère.À moins de tester aussi la longueur ? ça risque de se
compliquer alors.
Le 08/06/2021 Í 21:22, Olivier Miakinen a écrit :
ou=$(pwd)
Right!
if [ "${ou:12:3}" = '/.z' ] ; then
Tu voulais tester uniquement ~/.z mais ton test répondra vrai pour un répertoire nommé /etc/qqchose/.zilch/very_important/do_not_remove. Utiliser "${ou:12}" serait moins dangereux, ou "${ou: -3}" si ça doit s'adapter Í plusieurs home de longueur différente et que seul le /.z final compte. Mais ceci est sans doute encore plus lisible pour remplacer les deux lignes : if [ "$(basename $(pwd))" = '.z' ] ; then
Mais je veux que ça fonctionne aussi dans les sous-répertoires du consacré secret ~/.z , or pwd retourne /.z et non /.z/ et je ne peux donc pas tester un 16eme caractère.À moins de tester aussi la longueur ? ça risque de se compliquer alors.
pehache
Le 08/06/2021 Í 21:47, Benoit Izac a écrit :
Bonjour, Le 08/06/2021 Í 21:14, Olivier Miakinen a écrit dans le message <s9ofi6$1gr8$Â :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible, et qui peut s'imbriquer.
^^^^^^^^^^^^^^^^^^^^^^^ «Â `…`Â » s'imbrique aussi, c'est juste qu'il faut les échapper.
Et ça peut rapidement devenir totalement illisible, y compris pour celui qui essaie de l'écrire.
«Â $(…) » a aussi ses petits problèmes : % echo `(uname -s)` Linux % echo $((uname -s)) 0
Tu te fais éventuellement avoir une ou deux fois avec ça, et après tu retiens. L'illisibilité des backquote imbriquées par contre elle reste. -- "...sois ouvert aux idées des autres pour peu qu'elles aillent dans le même sens que les tiennes.", ST sur fr.bio.medecine
Le 08/06/2021 Í 21:47, Benoit Izac a écrit :
Bonjour,
Le 08/06/2021 Í 21:14, Olivier Miakinen a écrit dans le message
<s9ofi6$1gr8$1@cabale.usenet-fr.net>Â :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans
un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible,
et qui peut s'imbriquer.
^^^^^^^^^^^^^^^^^^^^^^^
«Â `…`Â » s'imbrique aussi, c'est juste qu'il faut les échapper.
Et ça peut rapidement devenir totalement illisible, y compris pour celui
qui essaie de l'écrire.
«Â $(…) » a aussi ses petits problèmes :
% echo `(uname -s)`
Linux
% echo $((uname -s))
0
Tu te fais éventuellement avoir une ou deux fois avec ça, et après tu
retiens. L'illisibilité des backquote imbriquées par contre elle reste.
--
"...sois ouvert aux idées des autres pour peu qu'elles aillent dans le
même sens que les tiennes.", ST sur fr.bio.medecine
Bonjour, Le 08/06/2021 Í 21:14, Olivier Miakinen a écrit dans le message <s9ofi6$1gr8$Â :
ou=`pwd`
La syntaxe avec `...` est désuète et souvent peu lisible (sauf bien sÍ»r dans un cas aussi simple que `pwd`). Lui préférer la syntaxe $(...), plus lisible, et qui peut s'imbriquer.
^^^^^^^^^^^^^^^^^^^^^^^ «Â `…`Â » s'imbrique aussi, c'est juste qu'il faut les échapper.
Et ça peut rapidement devenir totalement illisible, y compris pour celui qui essaie de l'écrire.
«Â $(…) » a aussi ses petits problèmes : % echo `(uname -s)` Linux % echo $((uname -s)) 0
Tu te fais éventuellement avoir une ou deux fois avec ça, et après tu retiens. L'illisibilité des backquote imbriquées par contre elle reste. -- "...sois ouvert aux idées des autres pour peu qu'elles aillent dans le même sens que les tiennes.", ST sur fr.bio.medecine