script bash
Le
Didier

Bonjour Í tou(te)s,
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
--
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
--
Probablement parce que le bash interactif active l'option nécessaire.
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 Í 20:18, Didier a écrit dans le message
shopt -s extglob
--
Benoit Izac
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
Juste deux petites remarques.
Le 08/06/2021 20:06, Didier a écrit :
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)
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 :
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)
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
Le 08/06/2021 Í 21:14, Olivier Miakinen a écrit dans le message
^^^^^^^^^^^^^^^^^^^^^^^
«Â `…`Â » 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
Right!
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.
Et ça peut rapidement devenir totalement illisible, y compris pour celui
qui essaie de l'écrire.
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